wp/wp-includes/class-wp-xmlrpc-server.php
author ymh <ymh.work@gmail.com>
Mon, 14 Oct 2019 17:39:30 +0200
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 9 177826044cd9
permissions -rw-r--r--
resynchronize code repo with production
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * XML-RPC protocol support for WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * @package WordPress
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     6
 * @subpackage Publishing
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * WordPress XMLRPC server implementation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * Implements compatibility for Blogger API, MetaWeblog API, MovableType, and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * pingback. Additional WordPress API for managing comments, pages, posts,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * options, etc.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * As of WordPress 3.5.0, XML-RPC is enabled by default. It can be disabled
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    17
 * via the {@see 'xmlrpc_enabled'} filter found in wp_xmlrpc_server::login().
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * @since 1.5.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    20
 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    21
 * @see IXR_Server
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
class wp_xmlrpc_server extends IXR_Server {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    24
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    25
	 * Methods.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    26
	 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    27
	 * @var array
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    28
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    29
	public $methods;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    30
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    31
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    32
	 * Blog options.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    33
	 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    34
	 * @var array
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    35
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    36
	public $blog_options;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    37
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    38
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    39
	 * IXR_Error instance.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    40
	 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    41
	 * @var IXR_Error
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    42
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    43
	public $error;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    44
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    46
	 * Flags that the user authentication has failed in this instance of wp_xmlrpc_server.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    47
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    48
	 * @var bool
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    49
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    50
	protected $auth_failed = false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    51
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    52
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    53
	 * Registers all of the XMLRPC methods that XMLRPC server understands.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
	 * Sets up server and method property. Passes XMLRPC
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    56
	 * methods through the {@see 'xmlrpc_methods'} filter to allow plugins to extend
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    57
	 * or replace XML-RPC methods.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    61
	public function __construct() {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
		$this->methods = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
			// WordPress API
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
			'wp.getUsersBlogs'		=> 'this:wp_getUsersBlogs',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
			'wp.newPost'			=> 'this:wp_newPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			'wp.editPost'			=> 'this:wp_editPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
			'wp.deletePost'			=> 'this:wp_deletePost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
			'wp.getPost'			=> 'this:wp_getPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
			'wp.getPosts'			=> 'this:wp_getPosts',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
			'wp.newTerm'			=> 'this:wp_newTerm',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
			'wp.editTerm'			=> 'this:wp_editTerm',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
			'wp.deleteTerm'			=> 'this:wp_deleteTerm',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
			'wp.getTerm'			=> 'this:wp_getTerm',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
			'wp.getTerms'			=> 'this:wp_getTerms',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
			'wp.getTaxonomy'		=> 'this:wp_getTaxonomy',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
			'wp.getTaxonomies'		=> 'this:wp_getTaxonomies',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
			'wp.getUser'			=> 'this:wp_getUser',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
			'wp.getUsers'			=> 'this:wp_getUsers',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
			'wp.getProfile'			=> 'this:wp_getProfile',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
			'wp.editProfile'		=> 'this:wp_editProfile',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			'wp.getPage'			=> 'this:wp_getPage',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
			'wp.getPages'			=> 'this:wp_getPages',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			'wp.newPage'			=> 'this:wp_newPage',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
			'wp.deletePage'			=> 'this:wp_deletePage',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			'wp.editPage'			=> 'this:wp_editPage',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
			'wp.getPageList'		=> 'this:wp_getPageList',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			'wp.getAuthors'			=> 'this:wp_getAuthors',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
			'wp.getCategories'		=> 'this:mw_getCategories',		// Alias
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
			'wp.getTags'			=> 'this:wp_getTags',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			'wp.newCategory'		=> 'this:wp_newCategory',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
			'wp.deleteCategory'		=> 'this:wp_deleteCategory',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
			'wp.suggestCategories'	=> 'this:wp_suggestCategories',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
			'wp.uploadFile'			=> 'this:mw_newMediaObject',	// Alias
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    94
			'wp.deleteFile'			=> 'this:wp_deletePost',		// Alias
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
			'wp.getCommentCount'	=> 'this:wp_getCommentCount',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
			'wp.getPostStatusList'	=> 'this:wp_getPostStatusList',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
			'wp.getPageStatusList'	=> 'this:wp_getPageStatusList',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
			'wp.getPageTemplates'	=> 'this:wp_getPageTemplates',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
			'wp.getOptions'			=> 'this:wp_getOptions',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
			'wp.setOptions'			=> 'this:wp_setOptions',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
			'wp.getComment'			=> 'this:wp_getComment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
			'wp.getComments'		=> 'this:wp_getComments',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
			'wp.deleteComment'		=> 'this:wp_deleteComment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
			'wp.editComment'		=> 'this:wp_editComment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
			'wp.newComment'			=> 'this:wp_newComment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
			'wp.getCommentStatusList' => 'this:wp_getCommentStatusList',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
			'wp.getMediaItem'		=> 'this:wp_getMediaItem',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
			'wp.getMediaLibrary'	=> 'this:wp_getMediaLibrary',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
			'wp.getPostFormats'     => 'this:wp_getPostFormats',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
			'wp.getPostType'		=> 'this:wp_getPostType',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
			'wp.getPostTypes'		=> 'this:wp_getPostTypes',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
			'wp.getRevisions'		=> 'this:wp_getRevisions',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
			'wp.restoreRevision'	=> 'this:wp_restoreRevision',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
			// Blogger API
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			'blogger.getUsersBlogs' => 'this:blogger_getUsersBlogs',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
			'blogger.getUserInfo' => 'this:blogger_getUserInfo',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
			'blogger.getPost' => 'this:blogger_getPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
			'blogger.getRecentPosts' => 'this:blogger_getRecentPosts',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
			'blogger.newPost' => 'this:blogger_newPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
			'blogger.editPost' => 'this:blogger_editPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			'blogger.deletePost' => 'this:blogger_deletePost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
			// MetaWeblog API (with MT extensions to structs)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			'metaWeblog.newPost' => 'this:mw_newPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			'metaWeblog.editPost' => 'this:mw_editPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			'metaWeblog.getPost' => 'this:mw_getPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			'metaWeblog.getRecentPosts' => 'this:mw_getRecentPosts',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
			'metaWeblog.getCategories' => 'this:mw_getCategories',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			'metaWeblog.newMediaObject' => 'this:mw_newMediaObject',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
			// MetaWeblog API aliases for Blogger API
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
			// see http://www.xmlrpc.com/stories/storyReader$2460
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			'metaWeblog.deletePost' => 'this:blogger_deletePost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			'metaWeblog.getUsersBlogs' => 'this:blogger_getUsersBlogs',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
			// MovableType API
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			'mt.getCategoryList' => 'this:mt_getCategoryList',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
			'mt.getRecentPostTitles' => 'this:mt_getRecentPostTitles',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
			'mt.getPostCategories' => 'this:mt_getPostCategories',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
			'mt.setPostCategories' => 'this:mt_setPostCategories',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
			'mt.supportedMethods' => 'this:mt_supportedMethods',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
			'mt.supportedTextFilters' => 'this:mt_supportedTextFilters',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			'mt.getTrackbackPings' => 'this:mt_getTrackbackPings',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			'mt.publishPost' => 'this:mt_publishPost',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
			// PingBack
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
			'pingback.ping' => 'this:pingback_ping',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			'pingback.extensions.getPingbacks' => 'this:pingback_extensions_getPingbacks',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			'demo.sayHello' => 'this:sayHello',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
			'demo.addTwoNumbers' => 'this:addTwoNumbers'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
		$this->initialise_blog_option_info();
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   156
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   157
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   158
		 * Filters the methods exposed by the XML-RPC server.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   159
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   160
		 * This filter can be used to add new methods, and remove built-in methods.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   161
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   162
		 * @since 1.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   163
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   164
		 * @param array $methods An array of XML-RPC methods.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   165
		 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   166
		$this->methods = apply_filters( 'xmlrpc_methods', $this->methods );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   169
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   170
	 * Make private/protected methods readable for backward compatibility.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   171
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   172
	 * @since 4.0.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   173
	 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   174
	 * @param callable $name      Method to call.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   175
	 * @param array    $arguments Arguments to pass when calling.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   176
	 * @return array|IXR_Error|false Return value of the callback, false otherwise.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   177
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   178
	public function __call( $name, $arguments ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   179
		if ( '_multisite_getUsersBlogs' === $name ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   180
			return call_user_func_array( array( $this, $name ), $arguments );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   181
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   182
		return false;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   183
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   184
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   185
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   186
	 * Serves the XML-RPC request.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   187
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   188
	 * @since 2.9.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   189
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   190
	public function serve_request() {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
		$this->IXR_Server($this->methods);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
	 * Test XMLRPC API by saying, "Hello!" to client.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   199
	 * @return string Hello string response.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   201
	public function sayHello() {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
		return 'Hello!';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
	 * Test XMLRPC API by adding two numbers for client.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   210
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   211
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   212
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   213
	 *     @type int $number1 A number to add.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   214
	 *     @type int $number2 A second number to add.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   215
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   216
	 * @return int Sum of the two given numbers.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   218
	public function addTwoNumbers( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
		$number1 = $args[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		$number2 = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
		return $number1 + $number2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
	 * Log user in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
	 * @since 2.8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
	 * @param string $username User's username.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
	 * @param string $password User's password.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   231
	 * @return WP_User|bool WP_User object if authentication passed, false otherwise
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   233
	public function login( $username, $password ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   234
		/*
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   235
		 * Respect old get_option() filters left for back-compat when the 'enable_xmlrpc'
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   236
		 * option was deprecated in 3.5.0. Use the 'xmlrpc_enabled' hook instead.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   237
		 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   238
		$enabled = apply_filters( 'pre_option_enable_xmlrpc', false );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   239
		if ( false === $enabled ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   240
			$enabled = apply_filters( 'option_enable_xmlrpc', true );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   241
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   242
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   243
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   244
		 * Filters whether XML-RPC methods requiring authentication are enabled.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   245
		 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   246
		 * Contrary to the way it's named, this filter does not control whether XML-RPC is *fully*
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   247
		 * enabled, rather, it only controls whether XML-RPC methods requiring authentication - such
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   248
		 * as for publishing purposes - are enabled.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   249
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   250
		 * Further, the filter does not control whether pingbacks or other custom endpoints that don't
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   251
		 * require authentication are enabled. This behavior is expected, and due to how parity was matched
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   252
		 * with the `enable_xmlrpc` UI option the filter replaced when it was introduced in 3.5.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   253
		 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   254
		 * To disable XML-RPC methods that require authentication, use:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   255
		 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   256
		 *     add_filter( 'xmlrpc_enabled', '__return_false' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   257
		 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   258
		 * For more granular control over all XML-RPC methods and requests, see the {@see 'xmlrpc_methods'}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   259
		 * and {@see 'xmlrpc_element_limit'} hooks.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   260
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   261
		 * @since 3.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   262
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   263
		 * @param bool $enabled Whether XML-RPC is enabled. Default true.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   264
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
		$enabled = apply_filters( 'xmlrpc_enabled', $enabled );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
		if ( ! $enabled ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
			$this->error = new IXR_Error( 405, sprintf( __( 'XML-RPC services are disabled on this site.' ) ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   272
		if ( $this->auth_failed ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   273
			$user = new WP_Error( 'login_prevented' );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   274
		} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   275
			$user = wp_authenticate( $username, $password );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   276
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   277
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   278
		if ( is_wp_error( $user ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
			$this->error = new IXR_Error( 403, __( 'Incorrect username or password.' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   280
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   281
			// Flag that authentication has failed once on this wp_xmlrpc_server instance
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   282
			$this->auth_failed = true;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   283
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   284
			/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   285
			 * Filters the XML-RPC user login error message.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   286
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   287
			 * @since 3.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   288
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   289
			 * @param string  $error The XML-RPC error message.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   290
			 * @param WP_User $user  WP_User object.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   291
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
			$this->error = apply_filters( 'xmlrpc_login_error', $this->error, $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
		wp_set_current_user( $user->ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
		return $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
	 * Check user's credentials. Deprecated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
	 * @since 1.5.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   304
	 * @deprecated 2.8.0 Use wp_xmlrpc_server::login()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   305
	 * @see wp_xmlrpc_server::login()
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
	 * @param string $username User's username.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
	 * @param string $password User's password.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
	 * @return bool Whether authentication passed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   311
	public function login_pass_ok( $username, $password ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
		return (bool) $this->login( $username, $password );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
	 * Escape string or array of strings for database.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
	 * @since 1.5.2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
	 * @param string|array $data Escape single string or array of strings.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   321
	 * @return string|void Returns with string is passed, alters by-reference
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   322
	 *                     when array is passed.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   324
	public function escape( &$data ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
		if ( ! is_array( $data ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
			return wp_slash( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
		foreach ( $data as &$v ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
			if ( is_array( $v ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
				$this->escape( $v );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
			elseif ( ! is_object( $v ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
				$v = wp_slash( $v );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
	 * Retrieve custom fields for post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
	 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
	 * @param int $post_id Post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
	 * @return array Custom fields, if exist.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   344
	public function get_custom_fields($post_id) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
		$post_id = (int) $post_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
		$custom_fields = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
		foreach ( (array) has_meta($post_id) as $meta ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
			// Don't expose protected fields.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
			if ( ! current_user_can( 'edit_post_meta', $post_id , $meta['meta_key'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
			$custom_fields[] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
				"id"    => $meta['meta_id'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
				"key"   => $meta['meta_key'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
				"value" => $meta['meta_value']
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
		return $custom_fields;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
	 * Set custom fields for post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
	 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
	 * @param int $post_id Post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
	 * @param array $fields Custom fields.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   372
	public function set_custom_fields($post_id, $fields) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
		$post_id = (int) $post_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
		foreach ( (array) $fields as $meta ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
			if ( isset($meta['id']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
				$meta['id'] = (int) $meta['id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
				$pmeta = get_metadata_by_mid( 'post', $meta['id'] );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   379
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   380
				if ( ! $pmeta || $pmeta->post_id != $post_id ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   381
					continue;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   382
				}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   383
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
				if ( isset($meta['key']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
					$meta['key'] = wp_unslash( $meta['key'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
					if ( $meta['key'] !== $pmeta->meta_key )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
						continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
					$meta['value'] = wp_unslash( $meta['value'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
					if ( current_user_can( 'edit_post_meta', $post_id, $meta['key'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
						update_metadata_by_mid( 'post', $meta['id'], $meta['value'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
				} elseif ( current_user_can( 'delete_post_meta', $post_id, $pmeta->meta_key ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
					delete_metadata_by_mid( 'post', $meta['id'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
			} elseif ( current_user_can( 'add_post_meta', $post_id, wp_unslash( $meta['key'] ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
				add_post_meta( $post_id, $meta['key'], $meta['value'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   401
	 * Retrieve custom fields for a term.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   402
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   403
	 * @since 4.9.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   404
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   405
	 * @param int $term_id Term ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   406
	 * @return array Array of custom fields, if they exist.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   407
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   408
	public function get_term_custom_fields( $term_id ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   409
		$term_id = (int) $term_id;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   410
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   411
		$custom_fields = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   412
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   413
		foreach ( (array) has_term_meta( $term_id ) as $meta ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   414
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   415
			if ( ! current_user_can( 'edit_term_meta', $term_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   416
				continue;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   417
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   418
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   419
			$custom_fields[] = array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   420
				'id'    => $meta['meta_id'],
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   421
				'key'   => $meta['meta_key'],
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   422
				'value' => $meta['meta_value'],
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   423
			);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   424
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   425
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   426
		return $custom_fields;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   427
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   428
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   429
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   430
	 * Set custom fields for a term.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   431
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   432
	 * @since 4.9.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   433
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   434
	 * @param int $term_id Term ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   435
	 * @param array $fields Custom fields.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   436
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   437
	public function set_term_custom_fields( $term_id, $fields ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   438
		$term_id = (int) $term_id;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   439
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   440
		foreach ( (array) $fields as $meta ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   441
			if ( isset( $meta['id'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   442
				$meta['id'] = (int) $meta['id'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   443
				$pmeta = get_metadata_by_mid( 'term', $meta['id'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   444
				if ( isset( $meta['key'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   445
					$meta['key'] = wp_unslash( $meta['key'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   446
					if ( $meta['key'] !== $pmeta->meta_key ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   447
						continue;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   448
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   449
					$meta['value'] = wp_unslash( $meta['value'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   450
					if ( current_user_can( 'edit_term_meta', $term_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   451
						update_metadata_by_mid( 'term', $meta['id'], $meta['value'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   452
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   453
				} elseif ( current_user_can( 'delete_term_meta', $term_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   454
					delete_metadata_by_mid( 'term', $meta['id'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   455
				}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   456
			} elseif ( current_user_can( 'add_term_meta', $term_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   457
				add_term_meta( $term_id, $meta['key'], $meta['value'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   458
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   459
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   460
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   461
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   462
	/**
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
	 * Set up blog options property.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   465
	 * Passes property through {@see 'xmlrpc_blog_options'} filter.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
	 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   469
	public function initialise_blog_option_info() {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
		$this->blog_options = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
			// Read only options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
			'software_name'     => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
				'desc'          => __( 'Software Name' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
				'value'         => 'WordPress'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
			'software_version'  => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
				'desc'          => __( 'Software Version' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
				'readonly'      => true,
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   480
				'value'         => get_bloginfo( 'version' )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
			'blog_url'          => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
				'desc'          => __( 'WordPress Address (URL)' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
				'option'        => 'siteurl'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
			'home_url'          => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
				'desc'          => __( 'Site Address (URL)' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
				'option'        => 'home'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
			'login_url'          => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
				'desc'          => __( 'Login Address (URL)' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
				'value'         => wp_login_url( )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
			'admin_url'          => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
				'desc'          => __( 'The URL to the admin area' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
				'value'         => get_admin_url( )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
			'image_default_link_type' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
				'desc'          => __( 'Image default link type' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
				'option'        => 'image_default_link_type'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
			'image_default_size' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
				'desc'          => __( 'Image default size' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
				'option'        => 'image_default_size'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
			'image_default_align' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
				'desc'          => __( 'Image default align' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
				'option'        => 'image_default_align'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
			'template'          => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
				'desc'          => __( 'Template' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
				'option'        => 'template'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
			'stylesheet'        => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
				'desc'          => __( 'Stylesheet' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
				'option'        => 'stylesheet'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
			'post_thumbnail'    => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
				'desc'          => __('Post Thumbnail'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
				'readonly'      => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
				'value'         => current_theme_supports( 'post-thumbnails' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
			// Updatable options
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
			'time_zone'         => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
				'desc'          => __( 'Time Zone' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
				'option'        => 'gmt_offset'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
			'blog_title'        => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
				'desc'          => __( 'Site Title' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
				'option'        => 'blogname'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
			'blog_tagline'      => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
				'desc'          => __( 'Site Tagline' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
				'option'        => 'blogdescription'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
			'date_format'       => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
				'desc'          => __( 'Date Format' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
				'option'        => 'date_format'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
			'time_format'       => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
				'desc'          => __( 'Time Format' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
				'option'        => 'time_format'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
			'users_can_register' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
				'desc'          => __( 'Allow new users to sign up' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
				'option'        => 'users_can_register'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
			'thumbnail_size_w'  => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
				'desc'          => __( 'Thumbnail Width' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
				'option'        => 'thumbnail_size_w'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
			'thumbnail_size_h'  => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
				'desc'          => __( 'Thumbnail Height' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
				'option'        => 'thumbnail_size_h'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
			'thumbnail_crop'    => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
				'desc'          => __( 'Crop thumbnail to exact dimensions' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
				'option'        => 'thumbnail_crop'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
			'medium_size_w'     => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
				'desc'          => __( 'Medium size image width' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
				'option'        => 'medium_size_w'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
			'medium_size_h'     => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
				'desc'          => __( 'Medium size image height' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
				'option'        => 'medium_size_h'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
			),
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   589
			'medium_large_size_w'   => array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   590
				'desc'          => __( 'Medium-Large size image width' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   591
				'readonly'      => false,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   592
				'option'        => 'medium_large_size_w'
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   593
			),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   594
			'medium_large_size_h'   => array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   595
				'desc'          => __( 'Medium-Large size image height' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   596
				'readonly'      => false,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   597
				'option'        => 'medium_large_size_h'
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   598
			),
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
			'large_size_w'      => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
				'desc'          => __( 'Large size image width' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
				'option'        => 'large_size_w'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
			'large_size_h'      => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
				'desc'          => __( 'Large size image height' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
				'option'        => 'large_size_h'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
			'default_comment_status' => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
				'desc'          => __( 'Allow people to post comments on new articles' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
				'option'        => 'default_comment_status'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
			),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
			'default_ping_status' => array(
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   615
				'desc'          => __( 'Allow link notifications from other blogs (pingbacks and trackbacks) on new articles' ),
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
				'readonly'      => false,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
				'option'        => 'default_ping_status'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
			)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   621
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   622
		 * Filters the XML-RPC blog options property.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   623
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   624
		 * @since 2.6.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   625
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   626
		 * @param array $blog_options An array of XML-RPC blog options.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   627
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
		$this->blog_options = apply_filters( 'xmlrpc_blog_options', $this->blog_options );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
	 * Retrieve the blogs of the user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
	 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   636
	 * @param array $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   637
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   638
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   639
	 *     @type string $username Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   640
	 *     @type string $password Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   641
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   642
	 * @return array|IXR_Error Array contains:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
	 *  - 'isAdmin'
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   644
	 *  - 'isPrimary' - whether the blog is the user's primary blog
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
	 *  - 'url'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
	 *  - 'blogid'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
	 *  - 'blogName'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
	 *  - 'xmlrpc' - url of xmlrpc endpoint
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   650
	public function wp_getUsersBlogs( $args ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   651
		if ( ! $this->minimum_args( $args, 2 ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   652
			return $this->error;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   653
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   654
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
		// If this isn't on WPMU then just use blogger_getUsersBlogs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
		if ( !is_multisite() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
			array_unshift( $args, 1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
			return $this->blogger_getUsersBlogs( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
		$username = $args[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
		$password = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   669
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   670
		 * Fires after the XML-RPC user has been authenticated but before the rest of
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   671
		 * the method logic begins.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   672
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   673
		 * All built-in XML-RPC methods use the action xmlrpc_call, with a parameter
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   674
		 * equal to the method's name, e.g., wp.getUsersBlogs, wp.newPost, etc.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   675
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   676
		 * @since 2.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   677
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   678
		 * @param string $name The method name.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   679
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
		do_action( 'xmlrpc_call', 'wp.getUsersBlogs' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
		$blogs = (array) get_blogs_of_user( $user->ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
		$struct = array();
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   684
		$primary_blog_id = 0;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   685
		$active_blog = get_active_blog_for_user( $user->ID );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   686
		if ( $active_blog ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   687
			$primary_blog_id = (int) $active_blog->blog_id;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   688
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
		foreach ( $blogs as $blog ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   691
			// Don't include blogs that aren't hosted at this site.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   692
			if ( $blog->site_id != get_current_network_id() )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
			$blog_id = $blog->userblog_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
			switch_to_blog( $blog_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
			$is_admin = current_user_can( 'manage_options' );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   700
			$is_primary = ( (int) $blog_id === $primary_blog_id );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
			$struct[] = array(
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   703
				'isAdmin'   => $is_admin,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   704
				'isPrimary' => $is_primary,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   705
				'url'       => home_url( '/' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   706
				'blogid'    => (string) $blog_id,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   707
				'blogName'  => get_option( 'blogname' ),
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   708
				'xmlrpc'    => site_url( 'xmlrpc.php', 'rpc' ),
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
			restore_current_blog();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
		return $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
	 * Checks if the method received at least the minimum number of arguments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
	 * @param string|array $args Sanitize single string or array of strings.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   723
	 * @param int $count         Minimum number of arguments.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   724
	 * @return bool if `$args` contains at least $count arguments.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
	protected function minimum_args( $args, $count ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
		if ( count( $args ) < $count ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
			$this->error = new IXR_Error( 400, __( 'Insufficient arguments passed to this XML-RPC method.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
	 * Prepares taxonomy data for return in an XML-RPC object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   738
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   739
	 * @param object $taxonomy The unprepared taxonomy data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   740
	 * @param array $fields    The subset of taxonomy fields to return.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   741
	 * @return array The prepared taxonomy data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
	protected function _prepare_taxonomy( $taxonomy, $fields ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
		$_taxonomy = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
			'name' => $taxonomy->name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
			'label' => $taxonomy->label,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
			'hierarchical' => (bool) $taxonomy->hierarchical,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
			'public' => (bool) $taxonomy->public,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
			'show_ui' => (bool) $taxonomy->show_ui,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
			'_builtin' => (bool) $taxonomy->_builtin,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
		if ( in_array( 'labels', $fields ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
			$_taxonomy['labels'] = (array) $taxonomy->labels;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
		if ( in_array( 'cap', $fields ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
			$_taxonomy['cap'] = (array) $taxonomy->cap;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
		if ( in_array( 'menu', $fields ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
			$_taxonomy['show_in_menu'] = (bool) $_taxonomy->show_in_menu;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
		if ( in_array( 'object_type', $fields ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
			$_taxonomy['object_type'] = array_unique( (array) $taxonomy->object_type );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   765
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   766
		 * Filters XML-RPC-prepared data for the given taxonomy.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   767
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   768
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   769
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   770
		 * @param array       $_taxonomy An array of taxonomy data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   771
		 * @param WP_Taxonomy $taxonomy  Taxonomy object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   772
		 * @param array       $fields    The subset of taxonomy fields to return.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   773
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
		return apply_filters( 'xmlrpc_prepare_taxonomy', $_taxonomy, $taxonomy, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
	 * Prepares term data for return in an XML-RPC object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   780
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   781
	 * @param array|object $term The unprepared term data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   782
	 * @return array The prepared term data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
	protected function _prepare_term( $term ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
		$_term = $term;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   786
		if ( ! is_array( $_term ) )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
			$_term = get_object_vars( $_term );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
		// For integers which may be larger than XML-RPC supports ensure we return strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
		$_term['term_id'] = strval( $_term['term_id'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
		$_term['term_group'] = strval( $_term['term_group'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
		$_term['term_taxonomy_id'] = strval( $_term['term_taxonomy_id'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
		$_term['parent'] = strval( $_term['parent'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
		// Count we are happy to return as an integer because people really shouldn't use terms that much.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
		$_term['count'] = intval( $_term['count'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   798
		// Get term meta.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   799
		$_term['custom_fields'] = $this->get_term_custom_fields( $_term['term_id'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   800
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   801
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   802
		 * Filters XML-RPC-prepared data for the given term.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   803
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   804
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   805
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   806
		 * @param array        $_term An array of term data.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   807
		 * @param array|object $term  Term object or array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   808
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
		return apply_filters( 'xmlrpc_prepare_term', $_term, $term );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
	 * Convert a WordPress date string to an IXR_Date object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   815
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   816
	 * @param string $date Date string to convert.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   817
	 * @return IXR_Date IXR_Date object.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
	protected function _convert_date( $date ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
		if ( $date === '0000-00-00 00:00:00' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
			return new IXR_Date( '00000000T00:00:00Z' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
		return new IXR_Date( mysql2date( 'Ymd\TH:i:s', $date, false ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
	 * Convert a WordPress GMT date string to an IXR_Date object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   829
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   830
	 * @param string $date_gmt WordPress GMT date string.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   831
	 * @param string $date     Date string.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   832
	 * @return IXR_Date IXR_Date object.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
	protected function _convert_date_gmt( $date_gmt, $date ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
		if ( $date !== '0000-00-00 00:00:00' && $date_gmt === '0000-00-00 00:00:00' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
			return new IXR_Date( get_gmt_from_date( mysql2date( 'Y-m-d H:i:s', $date, false ), 'Ymd\TH:i:s' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
		return $this->_convert_date( $date_gmt );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
	 * Prepares post data for return in an XML-RPC object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   844
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   845
	 * @param array $post   The unprepared post data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   846
	 * @param array $fields The subset of post type fields to return.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   847
	 * @return array The prepared post data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
	protected function _prepare_post( $post, $fields ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   850
		// Holds the data for this post. built up based on $fields.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
		$_post = array( 'post_id' => strval( $post['ID'] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   853
		// Prepare common post fields.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
		$post_fields = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
			'post_title'        => $post['post_title'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
			'post_date'         => $this->_convert_date( $post['post_date'] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
			'post_date_gmt'     => $this->_convert_date_gmt( $post['post_date_gmt'], $post['post_date'] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
			'post_modified'     => $this->_convert_date( $post['post_modified'] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
			'post_modified_gmt' => $this->_convert_date_gmt( $post['post_modified_gmt'], $post['post_modified'] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
			'post_status'       => $post['post_status'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
			'post_type'         => $post['post_type'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
			'post_name'         => $post['post_name'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
			'post_author'       => $post['post_author'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
			'post_password'     => $post['post_password'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
			'post_excerpt'      => $post['post_excerpt'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
			'post_content'      => $post['post_content'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
			'post_parent'       => strval( $post['post_parent'] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
			'post_mime_type'    => $post['post_mime_type'],
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   869
			'link'              => get_permalink( $post['ID'] ),
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
			'guid'              => $post['guid'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
			'menu_order'        => intval( $post['menu_order'] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
			'comment_status'    => $post['comment_status'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
			'ping_status'       => $post['ping_status'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
			'sticky'            => ( $post['post_type'] === 'post' && is_sticky( $post['ID'] ) ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   877
		// Thumbnail.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
		$post_fields['post_thumbnail'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
		$thumbnail_id = get_post_thumbnail_id( $post['ID'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
		if ( $thumbnail_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
			$thumbnail_size = current_theme_supports('post-thumbnail') ? 'post-thumbnail' : 'thumbnail';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
			$post_fields['post_thumbnail'] = $this->_prepare_media_item( get_post( $thumbnail_id ), $thumbnail_size );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   885
		// Consider future posts as published.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
		if ( $post_fields['post_status'] === 'future' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
			$post_fields['post_status'] = 'publish';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   889
		// Fill in blank post format.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
		$post_fields['post_format'] = get_post_format( $post['ID'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
		if ( empty( $post_fields['post_format'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
			$post_fields['post_format'] = 'standard';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   894
		// Merge requested $post_fields fields into $_post.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
		if ( in_array( 'post', $fields ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
			$_post = array_merge( $_post, $post_fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
			$requested_fields = array_intersect_key( $post_fields, array_flip( $fields ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
			$_post = array_merge( $_post, $requested_fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
		$all_taxonomy_fields = in_array( 'taxonomies', $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
		if ( $all_taxonomy_fields || in_array( 'terms', $fields ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
			$post_type_taxonomies = get_object_taxonomies( $post['post_type'], 'names' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
			$terms = wp_get_object_terms( $post['ID'], $post_type_taxonomies );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
			$_post['terms'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
			foreach ( $terms as $term ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
				$_post['terms'][] = $this->_prepare_term( $term );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
		if ( in_array( 'custom_fields', $fields ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
			$_post['custom_fields'] = $this->get_custom_fields( $post['ID'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
		if ( in_array( 'enclosure', $fields ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
			$_post['enclosure'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
			$enclosures = (array) get_post_meta( $post['ID'], 'enclosure' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
			if ( ! empty( $enclosures ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
				$encdata = explode( "\n", $enclosures[0] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
				$_post['enclosure']['url'] = trim( htmlspecialchars( $encdata[0] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
				$_post['enclosure']['length'] = (int) trim( $encdata[1] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
				$_post['enclosure']['type'] = trim( $encdata[2] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   927
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   928
		 * Filters XML-RPC-prepared date for the given post.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   929
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   930
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   931
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   932
		 * @param array $_post  An array of modified post data.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   933
		 * @param array $post   An array of post data.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   934
		 * @param array $fields An array of post fields.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   935
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
		return apply_filters( 'xmlrpc_prepare_post', $_post, $post, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
	 * Prepares post data for return in an XML-RPC object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   942
	 * @since 3.4.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   943
	 * @since 4.6.0 Converted the `$post_type` parameter to accept a WP_Post_Type object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   944
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   945
	 * @param WP_Post_Type $post_type Post type object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   946
	 * @param array        $fields    The subset of post fields to return.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   947
	 * @return array The prepared post type data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
	protected function _prepare_post_type( $post_type, $fields ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
		$_post_type = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
			'name' => $post_type->name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
			'label' => $post_type->label,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
			'hierarchical' => (bool) $post_type->hierarchical,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
			'public' => (bool) $post_type->public,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
			'show_ui' => (bool) $post_type->show_ui,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
			'_builtin' => (bool) $post_type->_builtin,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
			'has_archive' => (bool) $post_type->has_archive,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
			'supports' => get_all_post_type_supports( $post_type->name ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
		if ( in_array( 'labels', $fields ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
			$_post_type['labels'] = (array) $post_type->labels;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
		if ( in_array( 'cap', $fields ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
			$_post_type['cap'] = (array) $post_type->cap;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
			$_post_type['map_meta_cap'] = (bool) $post_type->map_meta_cap;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
		if ( in_array( 'menu', $fields ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
			$_post_type['menu_position'] = (int) $post_type->menu_position;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
			$_post_type['menu_icon'] = $post_type->menu_icon;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
			$_post_type['show_in_menu'] = (bool) $post_type->show_in_menu;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
		if ( in_array( 'taxonomies', $fields ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
			$_post_type['taxonomies'] = get_object_taxonomies( $post_type->name, 'names' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   979
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   980
		 * Filters XML-RPC-prepared date for the given post type.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   981
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   982
		 * @since 3.4.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   983
		 * @since 4.6.0 Converted the `$post_type` parameter to accept a WP_Post_Type object.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   984
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   985
		 * @param array        $_post_type An array of post type data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   986
		 * @param WP_Post_Type $post_type  Post type object.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   987
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
		return apply_filters( 'xmlrpc_prepare_post_type', $_post_type, $post_type );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
	 * Prepares media item data for return in an XML-RPC object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   994
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   995
	 * @param object $media_item     The unprepared media item data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   996
	 * @param string $thumbnail_size The image size to use for the thumbnail URL.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   997
	 * @return array The prepared media item data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
	protected function _prepare_media_item( $media_item, $thumbnail_size = 'thumbnail' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
		$_media_item = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
			'attachment_id'    => strval( $media_item->ID ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
			'date_created_gmt' => $this->_convert_date_gmt( $media_item->post_date_gmt, $media_item->post_date ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
			'parent'           => $media_item->post_parent,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
			'link'             => wp_get_attachment_url( $media_item->ID ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
			'title'            => $media_item->post_title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
			'caption'          => $media_item->post_excerpt,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
			'description'      => $media_item->post_content,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
			'metadata'         => wp_get_attachment_metadata( $media_item->ID ),
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1009
			'type'             => $media_item->post_mime_type
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
		$thumbnail_src = image_downsize( $media_item->ID, $thumbnail_size );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
		if ( $thumbnail_src )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
			$_media_item['thumbnail'] = $thumbnail_src[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
			$_media_item['thumbnail'] = $_media_item['link'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1018
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1019
		 * Filters XML-RPC-prepared data for the given media item.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1020
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1021
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1022
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1023
		 * @param array  $_media_item    An array of media item data.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1024
		 * @param object $media_item     Media item object.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1025
		 * @param string $thumbnail_size Image size.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1026
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
		return apply_filters( 'xmlrpc_prepare_media_item', $_media_item, $media_item, $thumbnail_size );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
	 * Prepares page data for return in an XML-RPC object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1033
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1034
	 * @param object $page The unprepared page data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1035
	 * @return array The prepared page data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
	protected function _prepare_page( $page ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
		// Get all of the page content and link.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
		$full_page = get_extended( $page->post_content );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1040
		$link = get_permalink( $page->ID );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
		// Get info the page parent if there is one.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
		$parent_title = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
		if ( ! empty( $page->post_parent ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
			$parent = get_post( $page->post_parent );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
			$parent_title = $parent->post_title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
		// Determine comment and ping settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
		$allow_comments = comments_open( $page->ID ) ? 1 : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
		$allow_pings = pings_open( $page->ID ) ? 1 : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
		// Format page date.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
		$page_date = $this->_convert_date( $page->post_date );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
		$page_date_gmt = $this->_convert_date_gmt( $page->post_date_gmt, $page->post_date );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
		// Pull the categories info together.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
		$categories = array();
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1059
		if ( is_object_in_taxonomy( 'page', 'category' ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1060
			foreach ( wp_get_post_categories( $page->ID ) as $cat_id ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1061
				$categories[] = get_cat_name( $cat_id );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1062
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
		// Get the author info.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
		$author = get_userdata( $page->post_author );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
		$page_template = get_page_template_slug( $page->ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
		if ( empty( $page_template ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
			$page_template = 'default';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
		$_page = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
			'dateCreated'            => $page_date,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
			'userid'                 => $page->post_author,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
			'page_id'                => $page->ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
			'page_status'            => $page->post_status,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
			'description'            => $full_page['main'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
			'title'                  => $page->post_title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
			'link'                   => $link,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
			'permaLink'              => $link,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
			'categories'             => $categories,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
			'excerpt'                => $page->post_excerpt,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
			'text_more'              => $full_page['extended'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
			'mt_allow_comments'      => $allow_comments,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
			'mt_allow_pings'         => $allow_pings,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
			'wp_slug'                => $page->post_name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
			'wp_password'            => $page->post_password,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
			'wp_author'              => $author->display_name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
			'wp_page_parent_id'      => $page->post_parent,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
			'wp_page_parent_title'   => $parent_title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
			'wp_page_order'          => $page->menu_order,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
			'wp_author_id'           => (string) $author->ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
			'wp_author_display_name' => $author->display_name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
			'date_created_gmt'       => $page_date_gmt,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
			'custom_fields'          => $this->get_custom_fields( $page->ID ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
			'wp_page_template'       => $page_template
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1099
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1100
		 * Filters XML-RPC-prepared data for the given page.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1101
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1102
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1103
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1104
		 * @param array   $_page An array of page data.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1105
		 * @param WP_Post $page  Page object.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1106
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
		return apply_filters( 'xmlrpc_prepare_page', $_page, $page );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
	 * Prepares comment data for return in an XML-RPC object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1113
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1114
	 * @param object $comment The unprepared comment data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1115
	 * @return array The prepared comment data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
	protected function _prepare_comment( $comment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
		// Format page date.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
		$comment_date_gmt = $this->_convert_date_gmt( $comment->comment_date_gmt, $comment->comment_date );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1121
		if ( '0' == $comment->comment_approved ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
			$comment_status = 'hold';
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1123
		} elseif ( 'spam' == $comment->comment_approved ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
			$comment_status = 'spam';
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1125
		} elseif ( '1' == $comment->comment_approved ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
			$comment_status = 'approve';
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1127
		} else {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
			$comment_status = $comment->comment_approved;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1129
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
		$_comment = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
			'date_created_gmt' => $comment_date_gmt,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
			'user_id'          => $comment->user_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
			'comment_id'       => $comment->comment_ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
			'parent'           => $comment->comment_parent,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
			'status'           => $comment_status,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
			'content'          => $comment->comment_content,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
			'link'             => get_comment_link($comment),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
			'post_id'          => $comment->comment_post_ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
			'post_title'       => get_the_title($comment->comment_post_ID),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
			'author'           => $comment->comment_author,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
			'author_url'       => $comment->comment_author_url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
			'author_email'     => $comment->comment_author_email,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
			'author_ip'        => $comment->comment_author_IP,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
			'type'             => $comment->comment_type,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1147
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1148
		 * Filters XML-RPC-prepared data for the given comment.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1149
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1150
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1151
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1152
		 * @param array      $_comment An array of prepared comment data.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1153
		 * @param WP_Comment $comment  Comment object.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1154
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
		return apply_filters( 'xmlrpc_prepare_comment', $_comment, $comment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
	 * Prepares user data for return in an XML-RPC object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1161
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1162
	 * @param WP_User $user   The unprepared user object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1163
	 * @param array   $fields The subset of user fields to return.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1164
	 * @return array The prepared user data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
	protected function _prepare_user( $user, $fields ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
		$_user = array( 'user_id' => strval( $user->ID ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
		$user_fields = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
			'username'          => $user->user_login,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
			'first_name'        => $user->user_firstname,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
			'last_name'         => $user->user_lastname,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
			'registered'        => $this->_convert_date( $user->user_registered ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
			'bio'               => $user->user_description,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
			'email'             => $user->user_email,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
			'nickname'          => $user->nickname,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
			'nicename'          => $user->user_nicename,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
			'url'               => $user->user_url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
			'display_name'      => $user->display_name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
			'roles'             => $user->roles,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
		if ( in_array( 'all', $fields ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
			$_user = array_merge( $_user, $user_fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
			if ( in_array( 'basic', $fields ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
				$basic_fields = array( 'username', 'email', 'registered', 'display_name', 'nicename' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
				$fields = array_merge( $fields, $basic_fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
			$requested_fields = array_intersect_key( $user_fields, array_flip( $fields ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
			$_user = array_merge( $_user, $requested_fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1194
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1195
		 * Filters XML-RPC-prepared data for the given user.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1196
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1197
		 * @since 3.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1198
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1199
		 * @param array   $_user  An array of user data.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1200
		 * @param WP_User $user   User object.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1201
		 * @param array   $fields An array of user fields.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1202
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
		return apply_filters( 'xmlrpc_prepare_user', $_user, $user, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
	 * Create a new post for any registered post type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1211
	 * @link https://en.wikipedia.org/wiki/RSS_enclosure for information on RSS enclosures.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1212
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1213
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1214
	 *     Method arguments. Note: top-level arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1215
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1216
	 *     @type int    $blog_id        Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1217
	 *     @type string $username       Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1218
	 *     @type string $password       Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1219
	 *     @type array  $content_struct {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1220
	 *         Content struct for adding a new post. See wp_insert_post() for information on
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1221
	 *         additional post fields
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1222
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1223
	 *         @type string $post_type      Post type. Default 'post'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1224
	 *         @type string $post_status    Post status. Default 'draft'
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1225
	 *         @type string $post_title     Post title.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1226
	 *         @type int    $post_author    Post author ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1227
	 *         @type string $post_excerpt   Post excerpt.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1228
	 *         @type string $post_content   Post content.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1229
	 *         @type string $post_date_gmt  Post date in GMT.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1230
	 *         @type string $post_date      Post date.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1231
	 *         @type string $post_password  Post password (20-character limit).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1232
	 *         @type string $comment_status Post comment enabled status. Accepts 'open' or 'closed'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1233
	 *         @type string $ping_status    Post ping status. Accepts 'open' or 'closed'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1234
	 *         @type bool   $sticky         Whether the post should be sticky. Automatically false if
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1235
	 *                                      `$post_status` is 'private'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1236
	 *         @type int    $post_thumbnail ID of an image to use as the post thumbnail/featured image.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1237
	 *         @type array  $custom_fields  Array of meta key/value pairs to add to the post.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1238
	 *         @type array  $terms          Associative array with taxonomy names as keys and arrays
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1239
	 *                                      of term IDs as values.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1240
	 *         @type array  $terms_names    Associative array with taxonomy names as keys and arrays
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1241
	 *                                      of term names as values.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1242
	 *         @type array  $enclosure      {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1243
	 *             Array of feed enclosure data to add to post meta.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1244
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1245
	 *             @type string $url    URL for the feed enclosure.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1246
	 *             @type int    $length Size in bytes of the enclosure.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1247
	 *             @type string $type   Mime-type for the enclosure.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1248
	 *         }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1249
	 *     }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1250
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1251
	 * @return int|IXR_Error Post ID on success, IXR_Error instance otherwise.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1253
	public function wp_newPost( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
		$username       = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
		$password       = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
		$content_struct = $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1266
		// convert the date field back to IXR form
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1267
		if ( isset( $content_struct['post_date'] ) && ! ( $content_struct['post_date'] instanceof IXR_Date ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1268
			$content_struct['post_date'] = $this->_convert_date( $content_struct['post_date'] );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1269
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1270
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1271
		// ignore the existing GMT date if it is empty or a non-GMT date was supplied in $content_struct,
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1272
		// since _insert_post will ignore the non-GMT date if the GMT date is set
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1273
		if ( isset( $content_struct['post_date_gmt'] ) && ! ( $content_struct['post_date_gmt'] instanceof IXR_Date ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1274
			if ( $content_struct['post_date_gmt'] == '0000-00-00 00:00:00' || isset( $content_struct['post_date'] ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1275
				unset( $content_struct['post_date_gmt'] );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1276
			} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1277
				$content_struct['post_date_gmt'] = $this->_convert_date( $content_struct['post_date_gmt'] );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1278
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1279
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1280
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1281
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
		do_action( 'xmlrpc_call', 'wp.newPost' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
		unset( $content_struct['ID'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
		return $this->_insert_post( $user, $content_struct );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
	 * Helper method for filtering out elements from an array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
	 * @param int $count Number to compare to one.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
	private function _is_greater_than_one( $count ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
		return $count > 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1301
	 * Encapsulate the logic for sticking a post
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1302
	 * and determining if the user has permission to do so
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1303
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1304
	 * @since 4.3.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1305
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1306
	 * @param array $post_data
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1307
	 * @param bool  $update
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1308
	 * @return void|IXR_Error
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1309
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1310
	private function _toggle_sticky( $post_data, $update = false ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1311
		$post_type = get_post_type_object( $post_data['post_type'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1312
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1313
		// Private and password-protected posts cannot be stickied.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1314
		if ( 'private' === $post_data['post_status'] || ! empty( $post_data['post_password'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1315
			// Error if the client tried to stick the post, otherwise, silently unstick.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1316
			if ( ! empty( $post_data['sticky'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1317
				return new IXR_Error( 401, __( 'Sorry, you cannot stick a private post.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1318
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1319
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1320
			if ( $update ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1321
				unstick_post( $post_data['ID'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1322
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1323
		} elseif ( isset( $post_data['sticky'] ) )  {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1324
			if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1325
				return new IXR_Error( 401, __( 'Sorry, you are not allowed to make posts sticky.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1326
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1327
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1328
			$sticky = wp_validate_boolean( $post_data['sticky'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1329
			if ( $sticky ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1330
				stick_post( $post_data['ID'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1331
			} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1332
				unstick_post( $post_data['ID'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1333
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1334
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1335
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1336
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1337
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1338
	 * Helper method for wp_newPost() and wp_editPost(), containing shared logic.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
	 * @since 3.4.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1341
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1342
	 * @see wp_insert_post()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1343
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1344
	 * @param WP_User         $user           The post author if post_author isn't set in $content_struct.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1345
	 * @param array|IXR_Error $content_struct Post data to insert.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1346
	 * @return IXR_Error|string
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
	protected function _insert_post( $user, $content_struct ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1349
		$defaults = array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1350
			'post_status'    => 'draft',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1351
			'post_type'      => 'post',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1352
			'post_author'    => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1353
			'post_password'  => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1354
			'post_excerpt'   => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1355
			'post_content'   => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1356
			'post_title'     => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1357
			'post_date'      => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1358
			'post_date_gmt'  => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1359
			'post_format'    => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1360
			'post_name'      => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1361
			'post_thumbnail' => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1362
			'post_parent'    => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1363
			'ping_status'    => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1364
			'comment_status' => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1365
			'custom_fields'  => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1366
			'terms_names'    => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1367
			'terms'          => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1368
			'sticky'         => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1369
			'enclosure'      => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1370
			'ID'             => null,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1371
		);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1372
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1373
		$post_data = wp_parse_args( array_intersect_key( $content_struct, $defaults ), $defaults );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
		$post_type = get_post_type_object( $post_data['post_type'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
		if ( ! $post_type )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1377
			return new IXR_Error( 403, __( 'Invalid post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
		$update = ! empty( $post_data['ID'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
		if ( $update ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
			if ( ! get_post( $post_data['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
				return new IXR_Error( 401, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
			if ( ! current_user_can( 'edit_post', $post_data['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
				return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
			if ( $post_data['post_type'] != get_post_type( $post_data['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
				return new IXR_Error( 401, __( 'The post type may not be changed.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
			if ( ! current_user_can( $post_type->cap->create_posts ) || ! current_user_can( $post_type->cap->edit_posts ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
				return new IXR_Error( 401, __( 'Sorry, you are not allowed to post on this site.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
		switch ( $post_data['post_status'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
			case 'draft':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
			case 'pending':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
			case 'private':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
				if ( ! current_user_can( $post_type->cap->publish_posts ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1399
					return new IXR_Error( 401, __( 'Sorry, you are not allowed to create private posts in this post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
			case 'publish':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
			case 'future':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
				if ( ! current_user_can( $post_type->cap->publish_posts ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1404
					return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish posts in this post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
				if ( ! get_post_status_object( $post_data['post_status'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
					$post_data['post_status'] = 'draft';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
			break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
		if ( ! empty( $post_data['post_password'] ) && ! current_user_can( $post_type->cap->publish_posts ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1413
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to create password protected posts in this post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
		$post_data['post_author'] = absint( $post_data['post_author'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
		if ( ! empty( $post_data['post_author'] ) && $post_data['post_author'] != $user->ID ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
			if ( ! current_user_can( $post_type->cap->edit_others_posts ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1418
				return new IXR_Error( 401, __( 'Sorry, you are not allowed to create posts as this user.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
			$author = get_userdata( $post_data['post_author'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
			if ( ! $author )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
				return new IXR_Error( 404, __( 'Invalid author ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
			$post_data['post_author'] = $user->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
		if ( isset( $post_data['comment_status'] ) && $post_data['comment_status'] != 'open' && $post_data['comment_status'] != 'closed' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
			unset( $post_data['comment_status'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
		if ( isset( $post_data['ping_status'] ) && $post_data['ping_status'] != 'open' && $post_data['ping_status'] != 'closed' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
			unset( $post_data['ping_status'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1434
		// Do some timestamp voodoo.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
		if ( ! empty( $post_data['post_date_gmt'] ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1436
			// We know this is supposed to be GMT, so we're going to slap that Z on there by force.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
			$dateCreated = rtrim( $post_data['post_date_gmt']->getIso(), 'Z' ) . 'Z';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
		} elseif ( ! empty( $post_data['post_date'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
			$dateCreated = $post_data['post_date']->getIso();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1442
		// Default to not flagging the post date to be edited unless it's intentional.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1443
		$post_data['edit_date'] = false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1444
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
		if ( ! empty( $dateCreated ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
			$post_data['post_date'] = get_date_from_gmt( iso8601_to_datetime( $dateCreated ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
			$post_data['post_date_gmt'] = iso8601_to_datetime( $dateCreated, 'GMT' );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1448
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1449
			// Flag the post date to be edited.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1450
			$post_data['edit_date'] = true;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
		if ( ! isset( $post_data['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
			$post_data['ID'] = get_default_post_to_edit( $post_data['post_type'], true )->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
		$post_ID = $post_data['ID'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
		if ( $post_data['post_type'] == 'post' ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1458
			$error = $this->_toggle_sticky( $post_data, $update );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1459
			if ( $error ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1460
				return $error;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
		if ( isset( $post_data['post_thumbnail'] ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1465
			// empty value deletes, non-empty value adds/updates.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
			if ( ! $post_data['post_thumbnail'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
				delete_post_thumbnail( $post_ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
			elseif ( ! get_post( absint( $post_data['post_thumbnail'] ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
				return new IXR_Error( 404, __( 'Invalid attachment ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
			set_post_thumbnail( $post_ID, $post_data['post_thumbnail'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
			unset( $content_struct['post_thumbnail'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
		if ( isset( $post_data['custom_fields'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
			$this->set_custom_fields( $post_ID, $post_data['custom_fields'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
		if ( isset( $post_data['terms'] ) || isset( $post_data['terms_names'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
			$post_type_taxonomies = get_object_taxonomies( $post_data['post_type'], 'objects' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1480
			// Accumulate term IDs from terms and terms_names.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
			$terms = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1483
			// First validate the terms specified by ID.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
			if ( isset( $post_data['terms'] ) && is_array( $post_data['terms'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
				$taxonomies = array_keys( $post_data['terms'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1487
				// Validating term ids.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
				foreach ( $taxonomies as $taxonomy ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
					if ( ! array_key_exists( $taxonomy , $post_type_taxonomies ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
						return new IXR_Error( 401, __( 'Sorry, one of the given taxonomies is not supported by the post type.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
					if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
						return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign a term to one of the given taxonomies.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
					$term_ids = $post_data['terms'][$taxonomy];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1496
					$terms[ $taxonomy ] = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
					foreach ( $term_ids as $term_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
						$term = get_term_by( 'id', $term_id, $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
						if ( ! $term )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1501
							return new IXR_Error( 403, __( 'Invalid term ID.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
						$terms[$taxonomy][] = (int) $term_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1508
			// Now validate terms specified by name.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
			if ( isset( $post_data['terms_names'] ) && is_array( $post_data['terms_names'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
				$taxonomies = array_keys( $post_data['terms_names'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
				foreach ( $taxonomies as $taxonomy ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
					if ( ! array_key_exists( $taxonomy , $post_type_taxonomies ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
						return new IXR_Error( 401, __( 'Sorry, one of the given taxonomies is not supported by the post type.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
					if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
						return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign a term to one of the given taxonomies.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1519
					/*
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1520
					 * For hierarchical taxonomies, we can't assign a term when multiple terms
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1521
					 * in the hierarchy share the same name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1522
					 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
					$ambiguous_terms = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
					if ( is_taxonomy_hierarchical( $taxonomy ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
						$tax_term_names = get_terms( $taxonomy, array( 'fields' => 'names', 'hide_empty' => false ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1527
						// Count the number of terms with the same name.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
						$tax_term_names_count = array_count_values( $tax_term_names );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1530
						// Filter out non-ambiguous term names.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
						$ambiguous_tax_term_counts = array_filter( $tax_term_names_count, array( $this, '_is_greater_than_one') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
						$ambiguous_terms = array_keys( $ambiguous_tax_term_counts );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
					$term_names = $post_data['terms_names'][$taxonomy];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
					foreach ( $term_names as $term_name ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
						if ( in_array( $term_name, $ambiguous_terms ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
							return new IXR_Error( 401, __( 'Ambiguous term name used in a hierarchical taxonomy. Please use term ID instead.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
						$term = get_term_by( 'name', $term_name, $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
						if ( ! $term ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1544
							// Term doesn't exist, so check that the user is allowed to create new terms.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
							if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->edit_terms ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
								return new IXR_Error( 401, __( 'Sorry, you are not allowed to add a term to one of the given taxonomies.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1548
							// Create the new term.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
							$term_info = wp_insert_term( $term_name, $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
							if ( is_wp_error( $term_info ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
								return new IXR_Error( 500, $term_info->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
							$terms[$taxonomy][] = (int) $term_info['term_id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
						} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
							$terms[$taxonomy][] = (int) $term->term_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
			$post_data['tax_input'] = $terms;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
			unset( $post_data['terms'], $post_data['terms_names'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
		if ( isset( $post_data['post_format'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
			$format = set_post_format( $post_ID, $post_data['post_format'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
			if ( is_wp_error( $format ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
				return new IXR_Error( 500, $format->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
			unset( $post_data['post_format'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1574
		// Handle enclosures.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
		$enclosure = isset( $post_data['enclosure'] ) ? $post_data['enclosure'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
		$this->add_enclosure_if_new( $post_ID, $enclosure );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
		$this->attach_uploads( $post_ID, $post_data['post_content'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1580
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1581
		 * Filters post data array to be inserted via XML-RPC.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1582
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1583
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1584
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1585
		 * @param array $post_data      Parsed array of post data.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1586
		 * @param array $content_struct Post data array.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1587
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
		$post_data = apply_filters( 'xmlrpc_wp_insert_post_data', $post_data, $content_struct );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
		$post_ID = $update ? wp_update_post( $post_data, true ) : wp_insert_post( $post_data, true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
		if ( is_wp_error( $post_ID ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
			return new IXR_Error( 500, $post_ID->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
		if ( ! $post_ID )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1595
			return new IXR_Error( 401, __( 'Sorry, your entry could not be posted.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
		return strval( $post_ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
	 * Edit a post for any registered post type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
	 * The $content_struct parameter only needs to contain fields that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
	 * should be changed. All other fields will retain their existing values.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1608
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1609
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1610
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1611
	 *     @type int    $blog_id        Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1612
	 *     @type string $username       Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1613
	 *     @type string $password       Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1614
	 *     @type int    $post_id        Post ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1615
	 *     @type array  $content_struct Extra content arguments.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1616
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1617
	 * @return true|IXR_Error True on success, IXR_Error on failure.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1619
	public function wp_editPost( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
		if ( ! $this->minimum_args( $args, 5 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
		$username       = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
		$password       = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
		$post_id        = (int) $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
		$content_struct = $args[4];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1633
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
		do_action( 'xmlrpc_call', 'wp.editPost' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
		$post = get_post( $post_id, ARRAY_A );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
		if ( empty( $post['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
		if ( isset( $content_struct['if_not_modified_since'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
			// If the post has been modified since the date provided, return an error.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
			if ( mysql2date( 'U', $post['post_modified_gmt'] ) > $content_struct['if_not_modified_since']->getTimestamp() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
				return new IXR_Error( 409, __( 'There is a revision of this post that is more recent.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1648
		// Convert the date field back to IXR form.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
		$post['post_date'] = $this->_convert_date( $post['post_date'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1651
		/*
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1652
		 * Ignore the existing GMT date if it is empty or a non-GMT date was supplied in $content_struct,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1653
		 * since _insert_post() will ignore the non-GMT date if the GMT date is set.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1654
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
		if ( $post['post_date_gmt'] == '0000-00-00 00:00:00' || isset( $content_struct['post_date'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
			unset( $post['post_date_gmt'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
			$post['post_date_gmt'] = $this->_convert_date( $post['post_date_gmt'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
		$this->escape( $post );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
		$merged_content_struct = array_merge( $post, $content_struct );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
		$retval = $this->_insert_post( $user, $merged_content_struct );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
		if ( $retval instanceof IXR_Error )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
			return $retval;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
	 * Delete a post for any registered post type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1675
	 * @see wp_delete_post()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1676
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1677
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1678
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1679
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1680
	 *     @type int    $blog_id  Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1681
	 *     @type string $username Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1682
	 *     @type string $password Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1683
	 *     @type int    $post_id  Post ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1684
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1685
	 * @return true|IXR_Error True on success, IXR_Error instance on failure.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1687
	public function wp_deletePost( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
		$username   = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
		$password   = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
		$post_id    = (int) $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1700
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
		do_action( 'xmlrpc_call', 'wp.deletePost' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
		$post = get_post( $post_id, ARRAY_A );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1704
		if ( empty( $post['ID'] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1706
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1707
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1708
		if ( ! current_user_can( 'delete_post', $post_id ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this post.' ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1710
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
		$result = wp_delete_post( $post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1714
		if ( ! $result ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
			return new IXR_Error( 500, __( 'The post cannot be deleted.' ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1716
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
	 * Retrieve a post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
	 * The optional $fields parameter specifies what fields will be included
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
	 * in the response array. This should be a list of field names. 'post_id' will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
	 * always be included in the response regardless of the value of $fields.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
	 * Instead of, or in addition to, individual field names, conceptual group
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
	 * names can be used to specify multiple fields. The available conceptual
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
	 * groups are 'post' (all basic fields), 'taxonomies', 'custom_fields',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
	 * and 'enclosure'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1735
	 * @see get_post()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1736
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1737
	 * @param array $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1738
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1739
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1740
	 *     @type int    $blog_id  Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1741
	 *     @type string $username Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1742
	 *     @type string $password Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1743
	 *     @type int    $post_id  Post ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1744
	 *     @type array  $fields   The subset of post type fields to return.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1745
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1746
	 * @return array|IXR_Error Array contains (based on $fields parameter):
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
	 *  - 'post_id'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
	 *  - 'post_title'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
	 *  - 'post_date'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
	 *  - 'post_date_gmt'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
	 *  - 'post_modified'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
	 *  - 'post_modified_gmt'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
	 *  - 'post_status'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
	 *  - 'post_type'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
	 *  - 'post_name'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
	 *  - 'post_author'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
	 *  - 'post_password'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
	 *  - 'post_excerpt'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
	 *  - 'post_content'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
	 *  - 'link'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
	 *  - 'comment_status'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
	 *  - 'ping_status'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
	 *  - 'sticky'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
	 *  - 'custom_fields'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
	 *  - 'terms'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
	 *  - 'categories'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
	 *  - 'tags'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
	 *  - 'enclosure'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1770
	public function wp_getPost( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1776
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1777
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1778
		$post_id  = (int) $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1780
		if ( isset( $args[4] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
			$fields = $args[4];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1782
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1783
			/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1784
			 * Filters the list of post query fields used by the given XML-RPC method.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1785
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1786
			 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1787
			 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1788
			 * @param array  $fields Array of post fields. Default array contains 'post', 'terms', and 'custom_fields'.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1789
			 * @param string $method Method name.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1790
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
			$fields = apply_filters( 'xmlrpc_default_post_fields', array( 'post', 'terms', 'custom_fields' ), 'wp.getPost' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1792
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1797
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
		do_action( 'xmlrpc_call', 'wp.getPost' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
		$post = get_post( $post_id, ARRAY_A );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
		if ( empty( $post['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
		if ( ! current_user_can( 'edit_post', $post_id ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1806
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
		return $this->_prepare_post( $post, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
	 * Retrieve posts.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1816
	 * @see wp_get_recent_posts()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1817
	 * @see wp_getPost() for more on `$fields`
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1818
	 * @see get_posts() for more on `$filter` values
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1819
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1820
	 * @param array $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1821
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1822
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1823
	 *     @type int    $blog_id  Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1824
	 *     @type string $username Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1825
	 *     @type string $password Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1826
	 *     @type array  $filter   Optional. Modifies the query used to retrieve posts. Accepts 'post_type',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1827
	 *                            'post_status', 'number', 'offset', 'orderby', 's', and 'order'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1828
	 *                            Default empty array.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1829
	 *     @type array  $fields   Optional. The subset of post type fields to return in the response array.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1830
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1831
	 * @return array|IXR_Error Array contains a collection of posts.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1833
	public function wp_getPosts( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
		if ( ! $this->minimum_args( $args, 3 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1839
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1840
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1841
		$filter   = isset( $args[3] ) ? $args[3] : array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1842
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1843
		if ( isset( $args[4] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
			$fields = $args[4];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1845
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1846
			/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
			$fields = apply_filters( 'xmlrpc_default_post_fields', array( 'post', 'terms', 'custom_fields' ), 'wp.getPosts' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1848
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1850
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1853
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1854
		do_action( 'xmlrpc_call', 'wp.getPosts' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
		$query = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
		if ( isset( $filter['post_type'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
			$post_type = get_post_type_object( $filter['post_type'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
			if ( ! ( (bool) $post_type ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1861
				return new IXR_Error( 403, __( 'Invalid post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
			$post_type = get_post_type_object( 'post' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
		if ( ! current_user_can( $post_type->cap->edit_posts ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1867
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts in this post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
		$query['post_type'] = $post_type->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
		if ( isset( $filter['post_status'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
			$query['post_status'] = $filter['post_status'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
		if ( isset( $filter['number'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
			$query['numberposts'] = absint( $filter['number'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
		if ( isset( $filter['offset'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
			$query['offset'] = absint( $filter['offset'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1879
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1880
		if ( isset( $filter['orderby'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1881
			$query['orderby'] = $filter['orderby'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
			if ( isset( $filter['order'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
				$query['order'] = $filter['order'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
		if ( isset( $filter['s'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
			$query['s'] = $filter['s'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
		$posts_list = wp_get_recent_posts( $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
		if ( ! $posts_list )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1894
			return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1895
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1896
		// Holds all the posts data.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1897
		$struct = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1898
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1899
		foreach ( $posts_list as $post ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
			if ( ! current_user_can( 'edit_post', $post['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1902
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
			$struct[] = $this->_prepare_post( $post, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
		return $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
	 * Create a new term.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1914
	 * @see wp_insert_term()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1915
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1916
	 * @param array $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1917
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1918
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1919
	 *     @type int    $blog_id        Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1920
	 *     @type string $username       Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1921
	 *     @type string $password       Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1922
	 *     @type array  $content_struct Content struct for adding a new term. The struct must contain
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1923
	 *                                  the term 'name' and 'taxonomy'. Optional accepted values include
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1924
	 *                                  'parent', 'description', and 'slug'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1925
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1926
	 * @return int|IXR_Error The term ID on success, or an IXR_Error object on failure.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1928
	public function wp_newTerm( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1934
		$username       = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1935
		$password       = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1936
		$content_struct = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1937
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1938
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1939
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1940
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1941
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
		do_action( 'xmlrpc_call', 'wp.newTerm' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1943
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1944
		if ( ! taxonomy_exists( $content_struct['taxonomy'] ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1945
			return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1946
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1947
		$taxonomy = get_taxonomy( $content_struct['taxonomy'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1949
		if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1950
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to create terms in this taxonomy.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1951
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
		$taxonomy = (array) $taxonomy;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
		// hold the data of the term
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
		$term_data = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
		$term_data['name'] = trim( $content_struct['name'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1959
		if ( empty( $term_data['name'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1960
			return new IXR_Error( 403, __( 'The term name cannot be empty.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1961
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1962
		if ( isset( $content_struct['parent'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
			if ( ! $taxonomy['hierarchical'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
				return new IXR_Error( 403, __( 'This taxonomy is not hierarchical.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1965
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1966
			$parent_term_id = (int) $content_struct['parent'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1967
			$parent_term = get_term( $parent_term_id , $taxonomy['name'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1968
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1969
			if ( is_wp_error( $parent_term ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1970
				return new IXR_Error( 500, $parent_term->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1971
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1972
			if ( ! $parent_term )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1973
				return new IXR_Error( 403, __( 'Parent term does not exist.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1974
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1975
			$term_data['parent'] = $content_struct['parent'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1976
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1977
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1978
		if ( isset( $content_struct['description'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1979
			$term_data['description'] = $content_struct['description'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
		if ( isset( $content_struct['slug'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
			$term_data['slug'] = $content_struct['slug'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
		$term = wp_insert_term( $term_data['name'] , $taxonomy['name'] , $term_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1985
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1986
		if ( is_wp_error( $term ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1987
			return new IXR_Error( 500, $term->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1988
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1989
		if ( ! $term )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1990
			return new IXR_Error( 500, __( 'Sorry, your term could not be created.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1991
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1992
		// Add term meta.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1993
		if ( isset( $content_struct['custom_fields'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1994
			$this->set_term_custom_fields( $term['term_id'], $content_struct['custom_fields'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1995
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1996
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1997
		return strval( $term['term_id'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1998
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1999
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2000
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2001
	 * Edit a term.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2002
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2003
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2004
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2005
	 * @see wp_update_term()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2006
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2007
	 * @param array $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2008
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2009
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2010
	 *     @type int    $blog_id        Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2011
	 *     @type string $username       Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2012
	 *     @type string $password       Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2013
	 *     @type int    $term_id        Term ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2014
	 *     @type array  $content_struct Content struct for editing a term. The struct must contain the
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2015
	 *                                  term ''taxonomy'. Optional accepted values include 'name', 'parent',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2016
	 *                                  'description', and 'slug'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2017
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2018
	 * @return true|IXR_Error True on success, IXR_Error instance on failure.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2019
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2020
	public function wp_editTerm( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2021
		if ( ! $this->minimum_args( $args, 5 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2022
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2023
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2024
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2025
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2026
		$username       = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2027
		$password       = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2028
		$term_id        = (int) $args[3];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2029
		$content_struct = $args[4];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2030
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2031
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2032
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2033
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2034
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2035
		do_action( 'xmlrpc_call', 'wp.editTerm' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2036
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2037
		if ( ! taxonomy_exists( $content_struct['taxonomy'] ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2038
			return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2039
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2040
		$taxonomy = get_taxonomy( $content_struct['taxonomy'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2041
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2042
		$taxonomy = (array) $taxonomy;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2043
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2044
		// hold the data of the term
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2045
		$term_data = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2046
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2047
		$term = get_term( $term_id , $content_struct['taxonomy'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2049
		if ( is_wp_error( $term ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2050
			return new IXR_Error( 500, $term->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2051
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2052
		if ( ! $term )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2053
			return new IXR_Error( 404, __( 'Invalid term ID.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2054
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2055
		if ( ! current_user_can( 'edit_term', $term_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2056
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this term.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2057
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2058
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2059
		if ( isset( $content_struct['name'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2060
			$term_data['name'] = trim( $content_struct['name'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2061
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2062
			if ( empty( $term_data['name'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2063
				return new IXR_Error( 403, __( 'The term name cannot be empty.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2064
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2065
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2066
		if ( ! empty( $content_struct['parent'] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2067
			if ( ! $taxonomy['hierarchical'] )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2068
				return new IXR_Error( 403, __( 'Cannot set parent term, taxonomy is not hierarchical.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2069
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2070
			$parent_term_id = (int) $content_struct['parent'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2071
			$parent_term = get_term( $parent_term_id , $taxonomy['name'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2072
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2073
			if ( is_wp_error( $parent_term ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2074
				return new IXR_Error( 500, $parent_term->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2075
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2076
			if ( ! $parent_term )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2077
				return new IXR_Error( 403, __( 'Parent term does not exist.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2078
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2079
			$term_data['parent'] = $content_struct['parent'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2080
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2081
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2082
		if ( isset( $content_struct['description'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2083
			$term_data['description'] = $content_struct['description'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2084
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2085
		if ( isset( $content_struct['slug'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2086
			$term_data['slug'] = $content_struct['slug'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2087
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2088
		$term = wp_update_term( $term_id , $taxonomy['name'] , $term_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2089
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2090
		if ( is_wp_error( $term ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2091
			return new IXR_Error( 500, $term->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2092
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2093
		if ( ! $term )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2094
			return new IXR_Error( 500, __( 'Sorry, editing the term failed.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2095
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2096
		// Update term meta.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2097
		if ( isset( $content_struct['custom_fields'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2098
			$this->set_term_custom_fields( $term_id, $content_struct['custom_fields'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2099
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2100
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2101
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2102
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2103
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2104
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2105
	 * Delete a term.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2106
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2107
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2108
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2109
	 * @see wp_delete_term()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2110
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2111
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2112
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2113
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2114
	 *     @type int    $blog_id      Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2115
	 *     @type string $username     Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2116
	 *     @type string $password     Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2117
	 *     @type string $taxnomy_name Taxonomy name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2118
	 *     @type int    $term_id      Term ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2119
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2120
	 * @return bool|IXR_Error True on success, IXR_Error instance on failure.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2121
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2122
	public function wp_deleteTerm( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2123
		if ( ! $this->minimum_args( $args, 5 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2124
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2125
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2126
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2128
		$username           = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2129
		$password           = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2130
		$taxonomy           = $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2131
		$term_id            = (int) $args[4];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2133
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2134
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2135
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2136
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2137
		do_action( 'xmlrpc_call', 'wp.deleteTerm' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2138
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2139
		if ( ! taxonomy_exists( $taxonomy ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2140
			return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2141
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2142
		$taxonomy = get_taxonomy( $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2143
		$term = get_term( $term_id, $taxonomy->name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2144
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2145
		if ( is_wp_error( $term ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2146
			return new IXR_Error( 500, $term->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2147
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2148
		if ( ! $term )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2149
			return new IXR_Error( 404, __( 'Invalid term ID.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2150
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2151
		if ( ! current_user_can( 'delete_term', $term_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2152
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this term.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2153
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2155
		$result = wp_delete_term( $term_id, $taxonomy->name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2156
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2157
		if ( is_wp_error( $result ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2158
			return new IXR_Error( 500, $term->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2159
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2160
		if ( ! $result )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2161
			return new IXR_Error( 500, __( 'Sorry, deleting the term failed.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2162
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2163
		return $result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2164
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2165
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2166
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2167
	 * Retrieve a term.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2168
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2169
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2170
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2171
	 * @see get_term()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2172
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2173
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2174
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2175
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2176
	 *     @type int    $blog_id  Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2177
	 *     @type string $username Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2178
	 *     @type string $password Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2179
	 *     @type string $taxnomy  Taxonomy name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2180
	 *     @type string $term_id  Term ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2181
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2182
	 * @return array|IXR_Error IXR_Error on failure, array on success, containing:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2183
	 *  - 'term_id'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2184
	 *  - 'name'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2185
	 *  - 'slug'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2186
	 *  - 'term_group'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2187
	 *  - 'term_taxonomy_id'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2188
	 *  - 'taxonomy'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2189
	 *  - 'description'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2190
	 *  - 'parent'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2191
	 *  - 'count'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2192
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2193
	public function wp_getTerm( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2194
		if ( ! $this->minimum_args( $args, 5 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2195
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2196
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2197
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2198
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2199
		$username           = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2200
		$password           = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2201
		$taxonomy           = $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2202
		$term_id            = (int) $args[4];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2203
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2204
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2205
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2206
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2207
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2208
		do_action( 'xmlrpc_call', 'wp.getTerm' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2210
		if ( ! taxonomy_exists( $taxonomy ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2211
			return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2212
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2213
		$taxonomy = get_taxonomy( $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2215
		$term = get_term( $term_id , $taxonomy->name, ARRAY_A );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2216
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2217
		if ( is_wp_error( $term ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2218
			return new IXR_Error( 500, $term->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2220
		if ( ! $term )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2221
			return new IXR_Error( 404, __( 'Invalid term ID.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2222
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2223
		if ( ! current_user_can( 'assign_term', $term_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2224
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign this term.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2225
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2227
		return $this->_prepare_term( $term );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2228
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2229
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2230
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2231
	 * Retrieve all terms for a taxonomy.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2232
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2233
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2234
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2235
	 * The optional $filter parameter modifies the query used to retrieve terms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2236
	 * Accepted keys are 'number', 'offset', 'orderby', 'order', 'hide_empty', and 'search'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2237
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2238
	 * @see get_terms()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2239
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2240
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2241
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2242
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2243
	 *     @type int    $blog_id  Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2244
	 *     @type string $username Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2245
	 *     @type string $password Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2246
	 *     @type string $taxnomy  Taxonomy name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2247
	 *     @type array  $filter   Optional. Modifies the query used to retrieve posts. Accepts 'number',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2248
	 *                            'offset', 'orderby', 'order', 'hide_empty', and 'search'. Default empty array.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2249
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2250
	 * @return array|IXR_Error An associative array of terms data on success, IXR_Error instance otherwise.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2251
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2252
	public function wp_getTerms( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2253
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2254
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2255
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2256
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2257
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2258
		$username       = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2259
		$password       = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2260
		$taxonomy       = $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2261
		$filter         = isset( $args[4] ) ? $args[4] : array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2263
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2264
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2265
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2266
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2267
		do_action( 'xmlrpc_call', 'wp.getTerms' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2268
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2269
		if ( ! taxonomy_exists( $taxonomy ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2270
			return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2271
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2272
		$taxonomy = get_taxonomy( $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2273
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2274
		if ( ! current_user_can( $taxonomy->cap->assign_terms ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2275
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign terms in this taxonomy.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2276
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2277
		$query = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2278
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2279
		if ( isset( $filter['number'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2280
			$query['number'] = absint( $filter['number'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2281
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2282
		if ( isset( $filter['offset'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2283
			$query['offset'] = absint( $filter['offset'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2284
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2285
		if ( isset( $filter['orderby'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2286
			$query['orderby'] = $filter['orderby'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2288
			if ( isset( $filter['order'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2289
				$query['order'] = $filter['order'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2290
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2291
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2292
		if ( isset( $filter['hide_empty'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2293
			$query['hide_empty'] = $filter['hide_empty'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2294
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2295
			$query['get'] = 'all';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2296
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2297
		if ( isset( $filter['search'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2298
			$query['search'] = $filter['search'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2299
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2300
		$terms = get_terms( $taxonomy->name, $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2301
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2302
		if ( is_wp_error( $terms ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2303
			return new IXR_Error( 500, $terms->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2304
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2305
		$struct = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2306
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2307
		foreach ( $terms as $term ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2308
			$struct[] = $this->_prepare_term( $term );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2309
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2310
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2311
		return $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2312
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2313
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2314
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2315
	 * Retrieve a taxonomy.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2316
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2317
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2318
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2319
	 * @see get_taxonomy()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2320
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2321
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2322
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2323
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2324
	 *     @type int    $blog_id  Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2325
	 *     @type string $username Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2326
	 *     @type string $password Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2327
	 *     @type string $taxnomy  Taxonomy name.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2328
	 *     @type array  $fields   Optional. Array of taxonomy fields to limit to in the return.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2329
	 *                            Accepts 'labels', 'cap', 'menu', and 'object_type'.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2330
	 *                            Default empty array.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2331
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2332
	 * @return array|IXR_Error An array of taxonomy data on success, IXR_Error instance otherwise.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2333
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2334
	public function wp_getTaxonomy( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2335
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2336
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2338
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2339
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2340
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2341
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2342
		$taxonomy = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2343
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2344
		if ( isset( $args[4] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2345
			$fields = $args[4];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2346
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2347
			/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2348
			 * Filters the taxonomy query fields used by the given XML-RPC method.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2349
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2350
			 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2351
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2352
			 * @param array  $fields An array of taxonomy fields to retrieve.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2353
			 * @param string $method The method name.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2354
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2355
			$fields = apply_filters( 'xmlrpc_default_taxonomy_fields', array( 'labels', 'cap', 'object_type' ), 'wp.getTaxonomy' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2356
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2357
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2358
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2359
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2360
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2361
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2362
		do_action( 'xmlrpc_call', 'wp.getTaxonomy' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2364
		if ( ! taxonomy_exists( $taxonomy ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2365
			return new IXR_Error( 403, __( 'Invalid taxonomy.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2367
		$taxonomy = get_taxonomy( $taxonomy );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2368
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2369
		if ( ! current_user_can( $taxonomy->cap->assign_terms ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2370
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign terms in this taxonomy.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2372
		return $this->_prepare_taxonomy( $taxonomy, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2373
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2375
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2376
	 * Retrieve all taxonomies.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2377
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2378
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2379
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2380
	 * @see get_taxonomies()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2381
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2382
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2383
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2384
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2385
	 *     @type int    $blog_id  Blog ID (unused).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2386
	 *     @type string $username Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2387
	 *     @type string $password Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2388
	 *     @type array  $filter   Optional. An array of arguments for retrieving taxonomies.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2389
	 *     @type array  $fields   Optional. The subset of taxonomy fields to return.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2390
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2391
	 * @return array|IXR_Error An associative array of taxonomy data with returned fields determined
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2392
	 *                         by `$fields`, or an IXR_Error instance on failure.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2393
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2394
	public function wp_getTaxonomies( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2395
		if ( ! $this->minimum_args( $args, 3 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2396
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2397
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2398
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2399
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2400
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2401
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2402
		$filter   = isset( $args[3] ) ? $args[3] : array( 'public' => true );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2403
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2404
		if ( isset( $args[4] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2405
			$fields = $args[4];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2406
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2407
			/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2408
			$fields = apply_filters( 'xmlrpc_default_taxonomy_fields', array( 'labels', 'cap', 'object_type' ), 'wp.getTaxonomies' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2409
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2410
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2411
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2412
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2413
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2414
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2415
		do_action( 'xmlrpc_call', 'wp.getTaxonomies' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2416
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2417
		$taxonomies = get_taxonomies( $filter, 'objects' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2418
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2419
		// holds all the taxonomy data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2420
		$struct = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2421
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2422
		foreach ( $taxonomies as $taxonomy ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2423
			// capability check for post_types
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2424
			if ( ! current_user_can( $taxonomy->cap->assign_terms ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2425
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2426
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2427
			$struct[] = $this->_prepare_taxonomy( $taxonomy, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2428
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2429
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2430
		return $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2431
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2432
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2433
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2434
	 * Retrieve a user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2435
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2436
	 * The optional $fields parameter specifies what fields will be included
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2437
	 * in the response array. This should be a list of field names. 'user_id' will
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2438
	 * always be included in the response regardless of the value of $fields.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2439
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2440
	 * Instead of, or in addition to, individual field names, conceptual group
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2441
	 * names can be used to specify multiple fields. The available conceptual
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2442
	 * groups are 'basic' and 'all'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2443
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2444
	 * @uses get_userdata()
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2445
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2446
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2447
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2448
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2449
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2450
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2451
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2452
	 *     @type int    $user_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2453
	 *     @type array  $fields (optional)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2454
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2455
	 * @return array|IXR_Error Array contains (based on $fields parameter):
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2456
	 *  - 'user_id'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2457
	 *  - 'username'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2458
	 *  - 'first_name'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2459
	 *  - 'last_name'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2460
	 *  - 'registered'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2461
	 *  - 'bio'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2462
	 *  - 'email'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2463
	 *  - 'nickname'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2464
	 *  - 'nicename'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2465
	 *  - 'url'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2466
	 *  - 'display_name'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2467
	 *  - 'roles'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2468
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2469
	public function wp_getUser( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2470
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2471
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2472
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2473
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2474
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2475
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2476
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2477
		$user_id  = (int) $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2478
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2479
		if ( isset( $args[4] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2480
			$fields = $args[4];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2481
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2482
			/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2483
			 * Filters the default user query fields used by the given XML-RPC method.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2484
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2485
			 * @since 3.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2486
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2487
			 * @param array  $fields User query fields for given method. Default 'all'.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2488
			 * @param string $method The method name.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2489
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2490
			$fields = apply_filters( 'xmlrpc_default_user_fields', array( 'all' ), 'wp.getUser' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2491
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2492
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2493
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2494
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2495
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2496
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2497
		do_action( 'xmlrpc_call', 'wp.getUser' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2498
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2499
		if ( ! current_user_can( 'edit_user', $user_id ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2500
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this user.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2501
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2502
		$user_data = get_userdata( $user_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2503
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2504
		if ( ! $user_data )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2505
			return new IXR_Error( 404, __( 'Invalid user ID.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2506
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2507
		return $this->_prepare_user( $user_data, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2508
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2509
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2510
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2511
	 * Retrieve users.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2512
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2513
	 * The optional $filter parameter modifies the query used to retrieve users.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2514
	 * Accepted keys are 'number' (default: 50), 'offset' (default: 0), 'role',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2515
	 * 'who', 'orderby', and 'order'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2516
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2517
	 * The optional $fields parameter specifies what fields will be included
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2518
	 * in the response array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2519
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2520
	 * @uses get_users()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2521
	 * @see wp_getUser() for more on $fields and return values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2522
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2523
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2524
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2525
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2526
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2527
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2528
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2529
	 *     @type array  $filter (optional)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2530
	 *     @type array  $fields (optional)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2531
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2532
	 * @return array|IXR_Error users data
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2533
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2534
	public function wp_getUsers( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2535
		if ( ! $this->minimum_args( $args, 3 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2536
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2537
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2538
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2539
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2540
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2541
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2542
		$filter   = isset( $args[3] ) ? $args[3] : array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2543
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2544
		if ( isset( $args[4] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2545
			$fields = $args[4];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2546
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2547
			/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2548
			$fields = apply_filters( 'xmlrpc_default_user_fields', array( 'all' ), 'wp.getUsers' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2549
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2551
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2552
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2553
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2554
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2555
		do_action( 'xmlrpc_call', 'wp.getUsers' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2556
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2557
		if ( ! current_user_can( 'list_users' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2558
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to list users.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2559
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2560
		$query = array( 'fields' => 'all_with_meta' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2561
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2562
		$query['number'] = ( isset( $filter['number'] ) ) ? absint( $filter['number'] ) : 50;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2563
		$query['offset'] = ( isset( $filter['offset'] ) ) ? absint( $filter['offset'] ) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2565
		if ( isset( $filter['orderby'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2566
			$query['orderby'] = $filter['orderby'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2567
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2568
			if ( isset( $filter['order'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2569
				$query['order'] = $filter['order'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2570
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2571
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2572
		if ( isset( $filter['role'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2573
			if ( get_role( $filter['role'] ) === null )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2574
				return new IXR_Error( 403, __( 'Invalid role.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2575
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2576
			$query['role'] = $filter['role'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2577
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2578
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2579
		if ( isset( $filter['who'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2580
			$query['who'] = $filter['who'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2581
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2582
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2583
		$users = get_users( $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2584
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2585
		$_users = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2586
		foreach ( $users as $user_data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2587
			if ( current_user_can( 'edit_user', $user_data->ID ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2588
				$_users[] = $this->_prepare_user( $user_data, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2589
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2590
		return $_users;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2591
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2593
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2594
	 * Retrieve information about the requesting user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2595
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2596
	 * @uses get_userdata()
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2597
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2598
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2599
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2600
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2601
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2602
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2603
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2604
	 *     @type array  $fields (optional)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2605
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2606
	 * @return array|IXR_Error (@see wp_getUser)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2607
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2608
	public function wp_getProfile( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2609
		if ( ! $this->minimum_args( $args, 3 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2610
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2611
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2612
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2613
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2614
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2615
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2616
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2617
		if ( isset( $args[3] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2618
			$fields = $args[3];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2619
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2620
			/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2621
			$fields = apply_filters( 'xmlrpc_default_user_fields', array( 'all' ), 'wp.getProfile' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2622
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2623
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2624
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2625
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2626
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2627
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2628
		do_action( 'xmlrpc_call', 'wp.getProfile' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2630
		if ( ! current_user_can( 'edit_user', $user->ID ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2631
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit your profile.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2632
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2633
		$user_data = get_userdata( $user->ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2634
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2635
		return $this->_prepare_user( $user_data, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2636
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2637
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2638
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2639
	 * Edit user's profile.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2640
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2641
	 * @uses wp_update_user()
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2642
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2643
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2644
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2645
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2646
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2647
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2648
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2649
	 *     @type array  $content_struct It can optionally contain:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2650
	 *      - 'first_name'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2651
	 *      - 'last_name'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2652
	 *      - 'website'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2653
	 *      - 'display_name'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2654
	 *      - 'nickname'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2655
	 *      - 'nicename'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2656
	 *      - 'bio'
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2657
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2658
	 * @return true|IXR_Error True, on success.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2659
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2660
	public function wp_editProfile( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2661
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2662
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2663
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2664
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2665
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2666
		$username       = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2667
		$password       = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2668
		$content_struct = $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2670
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2671
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2672
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2673
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2674
		do_action( 'xmlrpc_call', 'wp.editProfile' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2675
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2676
		if ( ! current_user_can( 'edit_user', $user->ID ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2677
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit your profile.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2678
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2679
		// holds data of the user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2680
		$user_data = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2681
		$user_data['ID'] = $user->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2682
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2683
		// only set the user details if it was given
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2684
		if ( isset( $content_struct['first_name'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2685
			$user_data['first_name'] = $content_struct['first_name'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2686
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2687
		if ( isset( $content_struct['last_name'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2688
			$user_data['last_name'] = $content_struct['last_name'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2689
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2690
		if ( isset( $content_struct['url'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2691
			$user_data['user_url'] = $content_struct['url'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2692
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2693
		if ( isset( $content_struct['display_name'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2694
			$user_data['display_name'] = $content_struct['display_name'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2696
		if ( isset( $content_struct['nickname'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2697
			$user_data['nickname'] = $content_struct['nickname'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2698
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2699
		if ( isset( $content_struct['nicename'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2700
			$user_data['user_nicename'] = $content_struct['nicename'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2702
		if ( isset( $content_struct['bio'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2703
			$user_data['description'] = $content_struct['bio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2705
		$result = wp_update_user( $user_data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2706
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2707
		if ( is_wp_error( $result ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2708
			return new IXR_Error( 500, $result->get_error_message() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2709
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2710
		if ( ! $result )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2711
			return new IXR_Error( 500, __( 'Sorry, the user cannot be updated.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2712
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2713
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2714
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2715
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2716
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2717
	 * Retrieve page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2718
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2719
	 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2720
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2721
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2722
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2723
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2724
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2725
	 *     @type int    $page_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2726
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2727
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2728
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2729
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2730
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2731
	public function wp_getPage( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2732
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2733
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2734
		$page_id  = (int) $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2735
		$username = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2736
		$password = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2737
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2738
		if ( !$user = $this->login($username, $password) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2739
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2740
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2741
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2742
		$page = get_post($page_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2743
		if ( ! $page )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2744
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2746
		if ( !current_user_can( 'edit_page', $page_id ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2747
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this page.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2748
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2749
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2750
		do_action( 'xmlrpc_call', 'wp.getPage' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2751
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2752
		// If we found the page then format the data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2753
		if ( $page->ID && ($page->post_type == 'page') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2754
			return $this->_prepare_page( $page );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2755
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2756
		// If the page doesn't exist indicate that.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2757
		else {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2758
			return new IXR_Error( 404, __( 'Sorry, no such page.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2759
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2760
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2762
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2763
	 * Retrieve Pages.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2764
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2765
	 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2766
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2767
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2768
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2769
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2770
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2771
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2772
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2773
	 *     @type int    $num_pages
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2774
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2775
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2776
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2777
	public function wp_getPages( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2778
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2779
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2780
		$username  = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2781
		$password  = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2782
		$num_pages = isset($args[3]) ? (int) $args[3] : 10;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2783
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2784
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2785
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2786
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2787
		if ( !current_user_can( 'edit_pages' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2788
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit pages.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2789
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2790
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2791
		do_action( 'xmlrpc_call', 'wp.getPages' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2792
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2793
		$pages = get_posts( array('post_type' => 'page', 'post_status' => 'any', 'numberposts' => $num_pages) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2794
		$num_pages = count($pages);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2795
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2796
		// If we have pages, put together their info.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2797
		if ( $num_pages >= 1 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2798
			$pages_struct = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2799
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2800
			foreach ($pages as $page) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2801
				if ( current_user_can( 'edit_page', $page->ID ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2802
					$pages_struct[] = $this->_prepare_page( $page );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2803
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2804
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2805
			return $pages_struct;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2806
		}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2807
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2808
		return array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2809
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2810
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2811
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2812
	 * Create new page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2813
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2814
	 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2815
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2816
	 * @see wp_xmlrpc_server::mw_newPost()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2817
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2818
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2819
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2820
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2821
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2822
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2823
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2824
	 *     @type array  $content_struct
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2825
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2826
	 * @return int|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2827
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2828
	public function wp_newPage( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2829
		// Items not escaped here will be escaped in newPost.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2830
		$username = $this->escape( $args[1] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2831
		$password = $this->escape( $args[2] );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2832
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2833
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2834
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2835
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2836
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2837
		do_action( 'xmlrpc_call', 'wp.newPage' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2838
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2839
		// Mark this as content for a page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2840
		$args[3]["post_type"] = 'page';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2841
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2842
		// Let mw_newPost do all of the heavy lifting.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2843
		return $this->mw_newPost( $args );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2844
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2845
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2846
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2847
	 * Delete page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2848
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2849
	 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2850
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2851
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2852
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2853
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2854
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2855
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2856
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2857
	 *     @type int    $page_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2858
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2859
	 * @return true|IXR_Error True, if success.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2860
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2861
	public function wp_deletePage( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2862
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2863
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2864
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2865
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2866
		$page_id  = (int) $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2867
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2868
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2869
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2870
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2871
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2872
		do_action( 'xmlrpc_call', 'wp.deletePage' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2873
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2874
		// Get the current page based on the page_id and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2875
		// make sure it is a page and not a post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2876
		$actual_page = get_post($page_id, ARRAY_A);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2877
		if ( !$actual_page || ($actual_page['post_type'] != 'page') )
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2878
			return new IXR_Error( 404, __( 'Sorry, no such page.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2879
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2880
		// Make sure the user can delete pages.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2881
		if ( !current_user_can('delete_page', $page_id) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2882
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this page.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2883
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2884
		// Attempt to delete the page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2885
		$result = wp_delete_post($page_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2886
		if ( !$result )
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2887
			return new IXR_Error( 500, __( 'Failed to delete the page.' ) );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2888
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2889
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2890
		 * Fires after a page has been successfully deleted via XML-RPC.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2891
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2892
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2893
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2894
		 * @param int   $page_id ID of the deleted page.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2895
		 * @param array $args    An array of arguments to delete the page.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2896
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2897
		do_action( 'xmlrpc_call_success_wp_deletePage', $page_id, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2898
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2899
		return true;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2900
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2901
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2902
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2903
	 * Edit page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2904
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2905
	 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2906
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2907
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2908
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2909
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2910
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2911
	 *     @type int    $page_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2912
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2913
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2914
	 *     @type string $content
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2915
	 *     @type string $publish
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2916
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2917
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2918
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2919
	public function wp_editPage( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2920
		// Items will be escaped in mw_editPost.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2921
		$page_id  = (int) $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2922
		$username = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2923
		$password = $args[3];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2924
		$content  = $args[4];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2925
		$publish  = $args[5];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2926
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2927
		$escaped_username = $this->escape( $username );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2928
		$escaped_password = $this->escape( $password );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2929
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2930
		if ( !$user = $this->login( $escaped_username, $escaped_password ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2931
			return $this->error;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2932
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2933
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2934
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2935
		do_action( 'xmlrpc_call', 'wp.editPage' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2936
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2937
		// Get the page data and make sure it is a page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2938
		$actual_page = get_post($page_id, ARRAY_A);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2939
		if ( !$actual_page || ($actual_page['post_type'] != 'page') )
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2940
			return new IXR_Error( 404, __( 'Sorry, no such page.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2941
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2942
		// Make sure the user is allowed to edit pages.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2943
		if ( !current_user_can('edit_page', $page_id) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2944
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this page.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2945
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2946
		// Mark this as content for a page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2947
		$content['post_type'] = 'page';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2948
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2949
		// Arrange args in the way mw_editPost understands.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2950
		$args = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2951
			$page_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2952
			$username,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2953
			$password,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2954
			$content,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2955
			$publish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2956
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2957
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2958
		// Let mw_editPost do all of the heavy lifting.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2959
		return $this->mw_editPost( $args );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2960
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2961
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2962
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2963
	 * Retrieve page list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2964
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2965
	 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2966
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2967
	 * @global wpdb $wpdb WordPress database abstraction object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2968
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2969
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2970
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2971
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2972
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2973
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2974
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2975
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2976
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2977
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2978
	public function wp_getPageList( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2979
		global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2980
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2981
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2982
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2983
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2984
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2985
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2986
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2987
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2988
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2989
		if ( !current_user_can( 'edit_pages' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2990
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit pages.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2991
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2992
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2993
		do_action( 'xmlrpc_call', 'wp.getPageList' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2994
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2995
		// Get list of pages ids and titles
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2996
		$page_list = $wpdb->get_results("
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2997
			SELECT ID page_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2998
				post_title page_title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2999
				post_parent page_parent_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3000
				post_date_gmt,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3001
				post_date,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3002
				post_status
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3003
			FROM {$wpdb->posts}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3004
			WHERE post_type = 'page'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3005
			ORDER BY ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3006
		");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3007
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3008
		// The date needs to be formatted properly.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3009
		$num_pages = count($page_list);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3010
		for ( $i = 0; $i < $num_pages; $i++ ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3011
			$page_list[$i]->dateCreated = $this->_convert_date(  $page_list[$i]->post_date );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3012
			$page_list[$i]->date_created_gmt = $this->_convert_date_gmt( $page_list[$i]->post_date_gmt, $page_list[$i]->post_date );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3013
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3014
			unset($page_list[$i]->post_date_gmt);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3015
			unset($page_list[$i]->post_date);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3016
			unset($page_list[$i]->post_status);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3017
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3018
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3019
		return $page_list;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3020
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3021
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3022
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3023
	 * Retrieve authors list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3024
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3025
	 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3026
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3027
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3028
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3029
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3030
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3031
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3032
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3033
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3034
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3035
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3036
	public function wp_getAuthors( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3037
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3038
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3039
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3040
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3041
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3042
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3043
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3044
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3045
		if ( !current_user_can('edit_posts') )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3046
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts.' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3047
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3048
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3049
		do_action( 'xmlrpc_call', 'wp.getAuthors' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3050
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3051
		$authors = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3052
		foreach ( get_users( array( 'fields' => array('ID','user_login','display_name') ) ) as $user ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3053
			$authors[] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3054
				'user_id'       => $user->ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3055
				'user_login'    => $user->user_login,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3056
				'display_name'  => $user->display_name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3057
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3058
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3059
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3060
		return $authors;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3061
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3062
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3063
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3064
	 * Get list of all tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3065
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3066
	 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3067
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3068
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3069
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3070
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3071
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3072
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3073
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3074
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3075
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3076
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3077
	public function wp_getTags( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3078
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3079
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3080
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3081
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3082
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3083
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3084
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3085
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3086
		if ( !current_user_can( 'edit_posts' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3087
			return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view tags.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3088
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3089
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3090
		do_action( 'xmlrpc_call', 'wp.getKeywords' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3091
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3092
		$tags = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3093
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3094
		if ( $all_tags = get_tags() ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3095
			foreach ( (array) $all_tags as $tag ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3096
				$struct = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3097
				$struct['tag_id']			= $tag->term_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3098
				$struct['name']				= $tag->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3099
				$struct['count']			= $tag->count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3100
				$struct['slug']				= $tag->slug;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3101
				$struct['html_url']			= esc_html( get_tag_link( $tag->term_id ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3102
				$struct['rss_url']			= esc_html( get_tag_feed_link( $tag->term_id ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3103
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3104
				$tags[] = $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3105
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3106
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3107
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3108
		return $tags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3109
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3111
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3112
	 * Create new category.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3113
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3114
	 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3115
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3116
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3117
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3118
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3119
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3120
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3121
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3122
	 *     @type array  $category
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3123
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3124
	 * @return int|IXR_Error Category ID.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3125
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3126
	public function wp_newCategory( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3127
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3128
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3129
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3130
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3131
		$category = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3133
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3134
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3135
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3136
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3137
		do_action( 'xmlrpc_call', 'wp.newCategory' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3138
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3139
		// Make sure the user is allowed to add a category.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3140
		if ( ! current_user_can( 'manage_categories' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3141
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to add a category.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3142
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3144
		// If no slug was provided make it empty so that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3145
		// WordPress will generate one.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3146
		if ( empty($category['slug']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3147
			$category['slug'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3148
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3149
		// If no parent_id was provided make it empty
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3150
		// so that it will be a top level page (no parent).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3151
		if ( !isset($category['parent_id']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3152
			$category['parent_id'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3153
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3154
		// If no description was provided make it empty.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3155
		if ( empty($category["description"]) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3156
			$category["description"] = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3157
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3158
		$new_category = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3159
			'cat_name'				=> $category['name'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3160
			'category_nicename'		=> $category['slug'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3161
			'category_parent'		=> $category['parent_id'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3162
			'category_description'	=> $category['description']
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3163
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3165
		$cat_id = wp_insert_category($new_category, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3166
		if ( is_wp_error( $cat_id ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3167
			if ( 'term_exists' == $cat_id->get_error_code() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3168
				return (int) $cat_id->get_error_data();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3169
			else
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3170
				return new IXR_Error(500, __('Sorry, the new category failed.'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3171
		} elseif ( ! $cat_id ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3172
			return new IXR_Error(500, __('Sorry, the new category failed.'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3173
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3174
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3175
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3176
		 * Fires after a new category has been successfully created via XML-RPC.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3177
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3178
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3179
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3180
		 * @param int   $cat_id ID of the new category.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3181
		 * @param array $args   An array of new category arguments.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3182
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3183
		do_action( 'xmlrpc_call_success_wp_newCategory', $cat_id, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3185
		return $cat_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3186
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3187
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3188
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3189
	 * Remove category.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3190
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3191
	 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3192
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3193
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3194
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3195
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3196
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3197
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3198
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3199
	 *     @type int    $category_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3200
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3201
	 * @return bool|IXR_Error See wp_delete_term() for return info.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3202
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3203
	public function wp_deleteCategory( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3204
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3205
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3206
		$username    = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3207
		$password    = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3208
		$category_id = (int) $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3210
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3211
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3212
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3213
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3214
		do_action( 'xmlrpc_call', 'wp.deleteCategory' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3215
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3216
		if ( ! current_user_can( 'delete_term', $category_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3217
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this category.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3218
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3220
		$status = wp_delete_term( $category_id, 'category' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3221
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3222
		if ( true == $status ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3223
			/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3224
			 * Fires after a category has been successfully deleted via XML-RPC.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3225
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3226
			 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3227
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3228
			 * @param int   $category_id ID of the deleted category.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3229
			 * @param array $args        An array of arguments to delete the category.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3230
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3231
			do_action( 'xmlrpc_call_success_wp_deleteCategory', $category_id, $args );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3232
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3233
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3234
		return $status;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3235
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3236
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3237
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3238
	 * Retrieve category list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3239
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3240
	 * @since 2.2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3241
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3242
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3243
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3244
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3245
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3246
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3247
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3248
	 *     @type array  $category
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3249
	 *     @type int    $max_results
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3250
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3251
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3252
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3253
	public function wp_suggestCategories( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3254
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3255
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3256
		$username    = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3257
		$password    = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3258
		$category    = $args[3];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3259
		$max_results = (int) $args[4];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3260
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3261
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3262
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3264
		if ( !current_user_can( 'edit_posts' ) )
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3265
			return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view categories.' ) );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3266
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3267
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3268
		do_action( 'xmlrpc_call', 'wp.suggestCategories' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3269
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3270
		$category_suggestions = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3271
		$args = array('get' => 'all', 'number' => $max_results, 'name__like' => $category);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3272
		foreach ( (array) get_categories($args) as $cat ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3273
			$category_suggestions[] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3274
				'category_id'	=> $cat->term_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3275
				'category_name'	=> $cat->name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3276
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3277
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3278
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3279
		return $category_suggestions;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3280
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3281
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3282
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3283
	 * Retrieve comment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3284
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3285
	 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3286
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3287
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3288
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3289
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3290
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3291
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3292
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3293
	 *     @type int    $comment_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3294
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3295
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3296
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3297
	public function wp_getComment($args) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3298
		$this->escape($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3299
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3300
		$username	= $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3301
		$password	= $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3302
		$comment_id	= (int) $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3303
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3304
		if ( ! $user = $this->login( $username, $password ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3305
			return $this->error;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3306
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3307
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3308
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3309
		do_action( 'xmlrpc_call', 'wp.getComment' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3310
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3311
		if ( ! $comment = get_comment( $comment_id ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3312
			return new IXR_Error( 404, __( 'Invalid comment ID.' ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3313
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3314
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3315
		if ( ! current_user_can( 'edit_comment', $comment_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3316
			return new IXR_Error( 403, __( 'Sorry, you are not allowed to moderate or edit this comment.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3317
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3318
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3319
		return $this->_prepare_comment( $comment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3320
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3321
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3322
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3323
	 * Retrieve comments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3324
	 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3325
	 * Besides the common blog_id (unused), username, and password arguments, it takes a filter
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3326
	 * array as last argument.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3327
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3328
	 * Accepted 'filter' keys are 'status', 'post_id', 'offset', and 'number'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3329
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3330
	 * The defaults are as follows:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3331
	 * - 'status' - Default is ''. Filter by status (e.g., 'approve', 'hold')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3332
	 * - 'post_id' - Default is ''. The post where the comment is posted. Empty string shows all comments.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3333
	 * - 'number' - Default is 10. Total number of media items to retrieve.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3334
	 * - 'offset' - Default is 0. See WP_Query::query() for more.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3335
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3336
	 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3337
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3338
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3339
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3340
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3341
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3342
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3343
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3344
	 *     @type array  $struct
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3345
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3346
	 * @return array|IXR_Error Contains a collection of comments. See wp_xmlrpc_server::wp_getComment() for a description of each item contents
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3347
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3348
	public function wp_getComments( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3349
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3350
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3351
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3352
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3353
		$struct	  = isset( $args[3] ) ? $args[3] : array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3354
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3355
		if ( ! $user = $this->login( $username, $password ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3356
			return $this->error;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3357
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3358
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3359
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3360
		do_action( 'xmlrpc_call', 'wp.getComments' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3361
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3362
		if ( isset( $struct['status'] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3363
			$status = $struct['status'];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3364
		} else {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3365
			$status = '';
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3366
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3367
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3368
		if ( ! current_user_can( 'moderate_comments' ) && 'approve' !== $status ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3369
			return new IXR_Error( 401, __( 'Invalid comment status.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3370
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3372
		$post_id = '';
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3373
		if ( isset( $struct['post_id'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3374
			$post_id = absint( $struct['post_id'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3375
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3376
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3377
		$post_type = '';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3378
		if ( isset( $struct['post_type'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3379
			$post_type_object = get_post_type_object( $struct['post_type'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3380
			if ( ! $post_type_object || ! post_type_supports( $post_type_object->name, 'comments' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3381
				return new IXR_Error( 404, __( 'Invalid post type.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3382
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3383
			$post_type = $struct['post_type'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3384
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3386
		$offset = 0;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3387
		if ( isset( $struct['offset'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3388
			$offset = absint( $struct['offset'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3389
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3390
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3391
		$number = 10;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3392
		if ( isset( $struct['number'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3393
			$number = absint( $struct['number'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3394
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3395
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3396
		$comments = get_comments( array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3397
			'status' => $status,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3398
			'post_id' => $post_id,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3399
			'offset' => $offset,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3400
			'number' => $number,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3401
			'post_type' => $post_type,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3402
		) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3403
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3404
		$comments_struct = array();
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3405
		if ( is_array( $comments ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3406
			foreach ( $comments as $comment ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3407
				$comments_struct[] = $this->_prepare_comment( $comment );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3408
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3409
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3410
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3411
		return $comments_struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3412
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3413
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3414
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3415
	 * Delete a comment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3416
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3417
	 * By default, the comment will be moved to the trash instead of deleted.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3418
	 * See wp_delete_comment() for more information on this behavior.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3419
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3420
	 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3421
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3422
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3423
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3424
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3425
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3426
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3427
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3428
	 *     @type int    $comment_ID
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3429
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3430
	 * @return bool|IXR_Error See wp_delete_comment().
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3431
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3432
	public function wp_deleteComment( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3433
		$this->escape($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3434
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3435
		$username	= $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3436
		$password	= $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3437
		$comment_ID	= (int) $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3438
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3439
		if ( ! $user = $this->login( $username, $password ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3440
			return $this->error;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3441
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3442
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3443
		if ( ! get_comment( $comment_ID ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3444
			return new IXR_Error( 404, __( 'Invalid comment ID.' ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3445
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3446
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3447
		if ( ! current_user_can( 'edit_comment', $comment_ID ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3448
			return new IXR_Error( 403, __( 'Sorry, you are not allowed to delete this comment.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3449
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3450
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3451
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3452
		do_action( 'xmlrpc_call', 'wp.deleteComment' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3453
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3454
		$status = wp_delete_comment( $comment_ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3455
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3456
		if ( $status ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3457
			/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3458
			 * Fires after a comment has been successfully deleted via XML-RPC.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3459
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3460
			 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3461
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3462
			 * @param int   $comment_ID ID of the deleted comment.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3463
			 * @param array $args       An array of arguments to delete the comment.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3464
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3465
			do_action( 'xmlrpc_call_success_wp_deleteComment', $comment_ID, $args );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3466
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3467
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3468
		return $status;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3469
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3470
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3471
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3472
	 * Edit comment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3473
	 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3474
	 * Besides the common blog_id (unused), username, and password arguments, it takes a
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3475
	 * comment_id integer and a content_struct array as last argument.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3476
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3477
	 * The allowed keys in the content_struct array are:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3478
	 *  - 'author'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3479
	 *  - 'author_url'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3480
	 *  - 'author_email'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3481
	 *  - 'content'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3482
	 *  - 'date_created_gmt'
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3483
	 *  - 'status'. Common statuses are 'approve', 'hold', 'spam'. See get_comment_statuses() for more details
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3484
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3485
	 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3486
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3487
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3488
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3489
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3490
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3491
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3492
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3493
	 *     @type int    $comment_ID
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3494
	 *     @type array  $content_struct
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3495
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3496
	 * @return true|IXR_Error True, on success.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3497
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3498
	public function wp_editComment( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3499
		$this->escape( $args );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3500
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3501
		$username	= $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3502
		$password	= $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3503
		$comment_ID	= (int) $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3504
		$content_struct = $args[4];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3505
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3506
		if ( !$user = $this->login( $username, $password ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3507
			return $this->error;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3508
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3509
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3510
		if ( ! get_comment( $comment_ID ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3511
			return new IXR_Error( 404, __( 'Invalid comment ID.' ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3512
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3513
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3514
		if ( ! current_user_can( 'edit_comment', $comment_ID ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3515
			return new IXR_Error( 403, __( 'Sorry, you are not allowed to moderate or edit this comment.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3516
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3517
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3518
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3519
		do_action( 'xmlrpc_call', 'wp.editComment' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3520
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3521
		if ( isset($content_struct['status']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3522
			$statuses = get_comment_statuses();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3523
			$statuses = array_keys($statuses);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3524
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3525
			if ( ! in_array($content_struct['status'], $statuses) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3526
				return new IXR_Error( 401, __( 'Invalid comment status.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3527
			$comment_approved = $content_struct['status'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3528
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3530
		// Do some timestamp voodoo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3531
		if ( !empty( $content_struct['date_created_gmt'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3532
			// We know this is supposed to be GMT, so we're going to slap that Z on there by force
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3533
			$dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3534
			$comment_date = get_date_from_gmt(iso8601_to_datetime($dateCreated));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3535
			$comment_date_gmt = iso8601_to_datetime($dateCreated, 'GMT');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3536
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3537
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3538
		if ( isset($content_struct['content']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3539
			$comment_content = $content_struct['content'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3540
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3541
		if ( isset($content_struct['author']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3542
			$comment_author = $content_struct['author'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3543
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3544
		if ( isset($content_struct['author_url']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3545
			$comment_author_url = $content_struct['author_url'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3546
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3547
		if ( isset($content_struct['author_email']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3548
			$comment_author_email = $content_struct['author_email'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3549
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3550
		// We've got all the data -- post it:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3551
		$comment = compact('comment_ID', 'comment_content', 'comment_approved', 'comment_date', 'comment_date_gmt', 'comment_author', 'comment_author_email', 'comment_author_url');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3552
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3553
		$result = wp_update_comment($comment);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3554
		if ( is_wp_error( $result ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3555
			return new IXR_Error(500, $result->get_error_message());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3556
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3557
		if ( !$result )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3558
			return new IXR_Error(500, __('Sorry, the comment could not be edited.'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3559
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3560
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3561
		 * Fires after a comment has been successfully updated via XML-RPC.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3562
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3563
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3564
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3565
		 * @param int   $comment_ID ID of the updated comment.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3566
		 * @param array $args       An array of arguments to update the comment.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3567
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3568
		do_action( 'xmlrpc_call_success_wp_editComment', $comment_ID, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3569
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3570
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3571
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3572
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3573
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3574
	 * Create new comment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3575
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3576
	 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3577
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3578
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3579
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3580
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3581
	 *     @type int        $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3582
	 *     @type string     $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3583
	 *     @type string     $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3584
	 *     @type string|int $post
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3585
	 *     @type array      $content_struct
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3586
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3587
	 * @return int|IXR_Error See wp_new_comment().
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3588
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3589
	public function wp_newComment($args) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3590
		$this->escape($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3591
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3592
		$username       = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3593
		$password       = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3594
		$post           = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3595
		$content_struct = $args[4];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3596
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3597
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3598
		 * Filters whether to allow anonymous comments over XML-RPC.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3599
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3600
		 * @since 2.7.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3601
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3602
		 * @param bool $allow Whether to allow anonymous commenting via XML-RPC.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3603
		 *                    Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3604
		 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3605
		$allow_anon = apply_filters( 'xmlrpc_allow_anonymous_comments', false );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3606
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3607
		$user = $this->login($username, $password);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3608
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3609
		if ( !$user ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3610
			$logged_in = false;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3611
			if ( $allow_anon && get_option('comment_registration') ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3612
				return new IXR_Error( 403, __( 'You must be registered to comment.' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3613
			} elseif ( ! $allow_anon ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3614
				return $this->error;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3615
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3616
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3617
			$logged_in = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3618
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3620
		if ( is_numeric($post) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3621
			$post_id = absint($post);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3622
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3623
			$post_id = url_to_postid($post);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3624
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3625
		if ( ! $post_id ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3626
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3627
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3628
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3629
		if ( ! get_post( $post_id ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3630
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3631
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3632
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3633
		if ( ! comments_open( $post_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3634
			return new IXR_Error( 403, __( 'Sorry, comments are closed for this item.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3635
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3636
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3637
		if ( empty( $content_struct['content'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3638
			return new IXR_Error( 403, __( 'Comment is required.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3639
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3640
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3641
		$comment = array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3642
			'comment_post_ID' => $post_id,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3643
			'comment_content' => $content_struct['content'],
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3644
		);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3645
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3646
		if ( $logged_in ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3647
			$display_name = $user->display_name;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3648
			$user_email = $user->user_email;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3649
			$user_url = $user->user_url;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3650
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3651
			$comment['comment_author'] = $this->escape( $display_name );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3652
			$comment['comment_author_email'] = $this->escape( $user_email );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3653
			$comment['comment_author_url'] = $this->escape( $user_url );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3654
			$comment['user_ID'] = $user->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3655
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3656
			$comment['comment_author'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3657
			if ( isset($content_struct['author']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3658
				$comment['comment_author'] = $content_struct['author'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3659
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3660
			$comment['comment_author_email'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3661
			if ( isset($content_struct['author_email']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3662
				$comment['comment_author_email'] = $content_struct['author_email'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3663
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3664
			$comment['comment_author_url'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3665
			if ( isset($content_struct['author_url']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3666
				$comment['comment_author_url'] = $content_struct['author_url'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3667
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3668
			$comment['user_ID'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3669
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3670
			if ( get_option('require_name_email') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3671
				if ( 6 > strlen($comment['comment_author_email']) || '' == $comment['comment_author'] )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3672
					return new IXR_Error( 403, __( 'Comment author name and email are required.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3673
				elseif ( !is_email($comment['comment_author_email']) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3674
					return new IXR_Error( 403, __( 'A valid email address is required.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3675
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3676
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3677
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3678
		$comment['comment_parent'] = isset($content_struct['comment_parent']) ? absint($content_struct['comment_parent']) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3679
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3680
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3681
		do_action( 'xmlrpc_call', 'wp.newComment' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3682
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3683
		$comment_ID = wp_new_comment( $comment, true );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3684
		if ( is_wp_error( $comment_ID ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3685
			return new IXR_Error( 403, $comment_ID->get_error_message() );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3686
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3687
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3688
		if ( ! $comment_ID ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3689
			return new IXR_Error( 403, __( 'Something went wrong.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3690
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3691
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3692
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3693
		 * Fires after a new comment has been successfully created via XML-RPC.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3694
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3695
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3696
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3697
		 * @param int   $comment_ID ID of the new comment.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3698
		 * @param array $args       An array of new comment arguments.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3699
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3700
		do_action( 'xmlrpc_call_success_wp_newComment', $comment_ID, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3702
		return $comment_ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3703
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3705
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3706
	 * Retrieve all of the comment status.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3707
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3708
	 * @since 2.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3709
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3710
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3711
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3712
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3713
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3714
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3715
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3716
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3717
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3718
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3719
	public function wp_getCommentStatusList( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3720
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3721
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3722
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3723
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3724
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3725
		if ( ! $user = $this->login( $username, $password ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3726
			return $this->error;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3727
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3728
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3729
		if ( ! current_user_can( 'publish_posts' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3730
			return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3731
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3732
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3733
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3734
		do_action( 'xmlrpc_call', 'wp.getCommentStatusList' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3735
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3736
		return get_comment_statuses();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3737
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3738
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3739
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3740
	 * Retrieve comment count.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3741
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3742
	 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3743
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3744
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3745
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3746
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3747
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3748
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3749
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3750
	 *     @type int    $post_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3751
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3752
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3753
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3754
	public function wp_getCommentCount( $args ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3755
		$this->escape( $args );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3757
		$username	= $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3758
		$password	= $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3759
		$post_id	= (int) $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3760
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3761
		if ( ! $user = $this->login( $username, $password ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3762
			return $this->error;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3763
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3764
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3765
		$post = get_post( $post_id, ARRAY_A );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3766
		if ( empty( $post['ID'] ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3767
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3768
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3769
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3770
		if ( ! current_user_can( 'edit_post', $post_id ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3771
			return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details of this post.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3772
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3773
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3774
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3775
		do_action( 'xmlrpc_call', 'wp.getCommentCount' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3776
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3777
		$count = wp_count_comments( $post_id );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3778
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3779
		return array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3780
			'approved' => $count->approved,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3781
			'awaiting_moderation' => $count->moderated,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3782
			'spam' => $count->spam,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3783
			'total_comments' => $count->total_comments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3784
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3785
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3786
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3787
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3788
	 * Retrieve post statuses.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3789
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3790
	 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3791
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3792
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3793
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3794
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3795
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3796
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3797
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3798
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3799
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3800
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3801
	public function wp_getPostStatusList( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3802
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3803
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3804
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3805
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3806
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3807
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3808
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3809
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3810
		if ( !current_user_can( 'edit_posts' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3811
			return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3812
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3813
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3814
		do_action( 'xmlrpc_call', 'wp.getPostStatusList' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3815
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3816
		return get_post_statuses();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3817
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3818
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3819
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3820
	 * Retrieve page statuses.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3821
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3822
	 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3823
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3824
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3825
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3826
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3827
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3828
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3829
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3830
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3831
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3832
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3833
	public function wp_getPageStatusList( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3834
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3835
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3836
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3837
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3838
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3839
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3840
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3841
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3842
		if ( !current_user_can( 'edit_pages' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3843
			return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3844
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3845
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3846
		do_action( 'xmlrpc_call', 'wp.getPageStatusList' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3847
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3848
		return get_page_statuses();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3849
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3850
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3851
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3852
	 * Retrieve page templates.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3853
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3854
	 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3855
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3856
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3857
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3858
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3859
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3860
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3861
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3862
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3863
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3864
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3865
	public function wp_getPageTemplates( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3866
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3867
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3868
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3869
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3870
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3871
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3872
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3873
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3874
		if ( !current_user_can( 'edit_pages' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3875
			return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3876
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3877
		$templates = get_page_templates();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3878
		$templates['Default'] = 'default';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3879
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3880
		return $templates;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3881
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3883
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3884
	 * Retrieve blog options.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3885
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3886
	 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3887
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3888
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3889
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3890
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3891
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3892
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3893
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3894
	 *     @type array  $options
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3895
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3896
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3897
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3898
	public function wp_getOptions( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3899
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3900
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3901
		$username	= $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3902
		$password	= $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3903
		$options	= isset( $args[3] ) ? (array) $args[3] : array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3904
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3905
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3906
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3907
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3908
		// If no specific options where asked for, return all of them
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3909
		if ( count( $options ) == 0 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3910
			$options = array_keys($this->blog_options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3911
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3912
		return $this->_getOptions($options);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3913
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3914
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3915
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3916
	 * Retrieve blog options value from list.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3917
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3918
	 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3919
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3920
	 * @param array $options Options to retrieve.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3921
	 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3922
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3923
	public function _getOptions($options) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3924
		$data = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3925
		$can_manage = current_user_can( 'manage_options' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3926
		foreach ( $options as $option ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3927
			if ( array_key_exists( $option, $this->blog_options ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3928
				$data[$option] = $this->blog_options[$option];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3929
				//Is the value static or dynamic?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3930
				if ( isset( $data[$option]['option'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3931
					$data[$option]['value'] = get_option( $data[$option]['option'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3932
					unset($data[$option]['option']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3933
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3934
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3935
				if ( ! $can_manage )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3936
					$data[$option]['readonly'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3937
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3938
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3939
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3940
		return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3941
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3942
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3943
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3944
	 * Update blog options.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3945
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3946
	 * @since 2.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3947
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3948
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3949
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3950
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3951
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3952
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3953
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3954
	 *     @type array  $options
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3955
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3956
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3957
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3958
	public function wp_setOptions( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3959
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3960
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3961
		$username	= $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3962
		$password	= $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3963
		$options	= (array) $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3964
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3965
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3966
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3967
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3968
		if ( !current_user_can( 'manage_options' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3969
			return new IXR_Error( 403, __( 'Sorry, you are not allowed to update options.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3970
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3971
		$option_names = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3972
		foreach ( $options as $o_name => $o_value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3973
			$option_names[] = $o_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3974
			if ( !array_key_exists( $o_name, $this->blog_options ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3975
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3976
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3977
			if ( $this->blog_options[$o_name]['readonly'] == true )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3978
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3979
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  3980
			update_option( $this->blog_options[$o_name]['option'], wp_unslash( $o_value ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3981
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3982
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3983
		//Now return the updated values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3984
		return $this->_getOptions($option_names);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3985
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3986
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3987
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3988
	 * Retrieve a media item by ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3989
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3990
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3991
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3992
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3993
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3994
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3995
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3996
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3997
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3998
	 *     @type int    $attachment_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3999
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4000
	 * @return array|IXR_Error Associative array contains:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4001
	 *  - 'date_created_gmt'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4002
	 *  - 'parent'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4003
	 *  - 'link'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4004
	 *  - 'thumbnail'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4005
	 *  - 'title'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4006
	 *  - 'caption'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4007
	 *  - 'description'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4008
	 *  - 'metadata'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4009
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4010
	public function wp_getMediaItem( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4011
		$this->escape( $args );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4012
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4013
		$username		= $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4014
		$password		= $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4015
		$attachment_id	= (int) $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4016
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4017
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4018
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4019
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4020
		if ( !current_user_can( 'upload_files' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4021
			return new IXR_Error( 403, __( 'Sorry, you are not allowed to upload files.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4022
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4023
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4024
		do_action( 'xmlrpc_call', 'wp.getMediaItem' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4025
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4026
		if ( ! $attachment = get_post($attachment_id) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4027
			return new IXR_Error( 404, __( 'Invalid attachment ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4028
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4029
		return $this->_prepare_media_item( $attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4030
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4031
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4032
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4033
	 * Retrieves a collection of media library items (or attachments)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4034
	 *
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4035
	 * Besides the common blog_id (unused), username, and password arguments, it takes a filter
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4036
	 * array as last argument.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4037
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4038
	 * Accepted 'filter' keys are 'parent_id', 'mime_type', 'offset', and 'number'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4039
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4040
	 * The defaults are as follows:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4041
	 * - 'number' - Default is 5. Total number of media items to retrieve.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4042
	 * - 'offset' - Default is 0. See WP_Query::query() for more.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4043
	 * - 'parent_id' - Default is ''. The post where the media item is attached. Empty string shows all media items. 0 shows unattached media items.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4044
	 * - 'mime_type' - Default is ''. Filter by mime type (e.g., 'image/jpeg', 'application/pdf')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4045
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4046
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4047
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4048
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4049
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4050
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4051
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4052
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4053
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4054
	 *     @type array  $struct
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4055
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4056
	 * @return array|IXR_Error Contains a collection of media items. See wp_xmlrpc_server::wp_getMediaItem() for a description of each item contents
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4057
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4058
	public function wp_getMediaLibrary($args) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4059
		$this->escape($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4060
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4061
		$username	= $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4062
		$password	= $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4063
		$struct		= isset( $args[3] ) ? $args[3] : array() ;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4064
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4065
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4066
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4067
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4068
		if ( !current_user_can( 'upload_files' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4069
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to upload files.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4070
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4071
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4072
		do_action( 'xmlrpc_call', 'wp.getMediaLibrary' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4073
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4074
		$parent_id = ( isset($struct['parent_id']) ) ? absint($struct['parent_id']) : '' ;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4075
		$mime_type = ( isset($struct['mime_type']) ) ? $struct['mime_type'] : '' ;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4076
		$offset = ( isset($struct['offset']) ) ? absint($struct['offset']) : 0 ;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4077
		$number = ( isset($struct['number']) ) ? absint($struct['number']) : -1 ;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4078
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4079
		$attachments = get_posts( array('post_type' => 'attachment', 'post_parent' => $parent_id, 'offset' => $offset, 'numberposts' => $number, 'post_mime_type' => $mime_type ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4080
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4081
		$attachments_struct = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4082
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4083
		foreach ($attachments as $attachment )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4084
			$attachments_struct[] = $this->_prepare_media_item( $attachment );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4085
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4086
		return $attachments_struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4087
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4088
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4089
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4090
	 * Retrieves a list of post formats used by the site.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4091
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4092
	 * @since 3.1.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4093
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4094
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4095
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4096
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4097
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4098
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4099
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4100
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4101
	 * @return array|IXR_Error List of post formats, otherwise IXR_Error object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4102
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4103
	public function wp_getPostFormats( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4104
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4106
		$username = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4107
		$password = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4108
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4109
		if ( !$user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4110
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4112
		if ( !current_user_can( 'edit_posts' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4113
			return new IXR_Error( 403, __( 'Sorry, you are not allowed access to details about this site.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4114
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4115
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4116
		do_action( 'xmlrpc_call', 'wp.getPostFormats' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4117
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4118
		$formats = get_post_format_strings();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4119
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4120
		// find out if they want a list of currently supports formats
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4121
		if ( isset( $args[3] ) && is_array( $args[3] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4122
			if ( $args[3]['show-supported'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4123
				if ( current_theme_supports( 'post-formats' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4124
					$supported = get_theme_support( 'post-formats' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4125
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4126
					$data = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4127
					$data['all'] = $formats;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4128
					$data['supported'] = $supported[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4130
					$formats = $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4131
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4132
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4133
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4135
		return $formats;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4136
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4138
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4139
	 * Retrieves a post type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4140
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4141
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4142
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4143
	 * @see get_post_type_object()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4144
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4145
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4146
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4147
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4148
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4149
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4150
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4151
	 *     @type string $post_type_name
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4152
	 *     @type array  $fields (optional)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4153
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4154
	 * @return array|IXR_Error Array contains:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4155
	 *  - 'labels'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4156
	 *  - 'description'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4157
	 *  - 'capability_type'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4158
	 *  - 'cap'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4159
	 *  - 'map_meta_cap'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4160
	 *  - 'hierarchical'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4161
	 *  - 'menu_position'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4162
	 *  - 'taxonomies'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4163
	 *  - 'supports'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4164
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4165
	public function wp_getPostType( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4166
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4167
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4169
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4170
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4171
		$username       = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4172
		$password       = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4173
		$post_type_name = $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4174
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4175
		if ( isset( $args[4] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4176
			$fields = $args[4];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4177
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4178
			/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4179
			 * Filters the default query fields used by the given XML-RPC method.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4180
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4181
			 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4182
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4183
			 * @param array  $fields An array of post type query fields for the given method.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4184
			 * @param string $method The method name.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4185
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4186
			$fields = apply_filters( 'xmlrpc_default_posttype_fields', array( 'labels', 'cap', 'taxonomies' ), 'wp.getPostType' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4187
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4188
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4189
		if ( !$user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4190
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4191
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4192
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4193
		do_action( 'xmlrpc_call', 'wp.getPostType' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4194
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4195
		if ( ! post_type_exists( $post_type_name ) )
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4196
			return new IXR_Error( 403, __( 'Invalid post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4198
		$post_type = get_post_type_object( $post_type_name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4199
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4200
		if ( ! current_user_can( $post_type->cap->edit_posts ) )
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4201
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts in this post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4202
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4203
		return $this->_prepare_post_type( $post_type, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4204
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4205
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4206
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4207
	 * Retrieves a post types
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4208
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4209
	 * @since 3.4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4210
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4211
	 * @see get_post_types()
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4212
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4213
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4214
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4215
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4216
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4217
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4218
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4219
	 *     @type array  $filter (optional)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4220
	 *     @type array  $fields (optional)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4221
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4222
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4223
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4224
	public function wp_getPostTypes( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4225
		if ( ! $this->minimum_args( $args, 3 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4226
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4227
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4228
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4229
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4230
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4231
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4232
		$filter   = isset( $args[3] ) ? $args[3] : array( 'public' => true );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4233
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4234
		if ( isset( $args[4] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4235
			$fields = $args[4];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4236
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4237
			/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4238
			$fields = apply_filters( 'xmlrpc_default_posttype_fields', array( 'labels', 'cap', 'taxonomies' ), 'wp.getPostTypes' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4239
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4241
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4242
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4243
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4244
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4245
		do_action( 'xmlrpc_call', 'wp.getPostTypes' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4246
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4247
		$post_types = get_post_types( $filter, 'objects' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4249
		$struct = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4250
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4251
		foreach ( $post_types as $post_type ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4252
			if ( ! current_user_can( $post_type->cap->edit_posts ) )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4253
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4254
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4255
			$struct[$post_type->name] = $this->_prepare_post_type( $post_type, $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4256
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4257
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4258
		return $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4259
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4260
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4261
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4262
	 * Retrieve revisions for a specific post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4263
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4264
	 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4265
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4266
	 * The optional $fields parameter specifies what fields will be included
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4267
	 * in the response array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4268
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4269
	 * @uses wp_get_post_revisions()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4270
	 * @see wp_getPost() for more on $fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4271
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4272
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4273
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4274
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4275
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4276
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4277
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4278
	 *     @type int    $post_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4279
	 *     @type array  $fields (optional)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4280
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4281
	 * @return array|IXR_Error contains a collection of posts.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4282
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4283
	public function wp_getRevisions( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4284
		if ( ! $this->minimum_args( $args, 4 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4285
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4286
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4287
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4288
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4289
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4290
		$password = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4291
		$post_id  = (int) $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4292
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4293
		if ( isset( $args[4] ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4294
			$fields = $args[4];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4295
		} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4296
			/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4297
			 * Filters the default revision query fields used by the given XML-RPC method.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4298
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4299
			 * @since 3.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4300
			 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4301
			 * @param array  $field  An array of revision query fields.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4302
			 * @param string $method The method name.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4303
			 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4304
			$fields = apply_filters( 'xmlrpc_default_revision_fields', array( 'post_date', 'post_date_gmt' ), 'wp.getRevisions' );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4305
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4306
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4307
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4308
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4309
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4310
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4311
		do_action( 'xmlrpc_call', 'wp.getRevisions' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4312
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4313
		if ( ! $post = get_post( $post_id ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4314
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4315
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4316
		if ( ! current_user_can( 'edit_post', $post_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4317
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4318
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4319
		// Check if revisions are enabled.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4320
		if ( ! wp_revisions_enabled( $post ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4321
			return new IXR_Error( 401, __( 'Sorry, revisions are disabled.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4322
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4323
		$revisions = wp_get_post_revisions( $post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4325
		if ( ! $revisions )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4326
			return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4328
		$struct = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4329
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4330
		foreach ( $revisions as $revision ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4331
			if ( ! current_user_can( 'read_post', $revision->ID ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4332
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4333
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4334
			// Skip autosaves
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4335
			if ( wp_is_post_autosave( $revision ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4336
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4338
			$struct[] = $this->_prepare_post( get_object_vars( $revision ), $fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4339
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4340
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4341
		return $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4342
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4343
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4344
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4345
	 * Restore a post revision
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4346
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4347
	 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4348
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4349
	 * @uses wp_restore_post_revision()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4350
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4351
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4352
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4353
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4354
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4355
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4356
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4357
	 *     @type int    $revision_id
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4358
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4359
	 * @return bool|IXR_Error false if there was an error restoring, true if success.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4360
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4361
	public function wp_restoreRevision( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4362
		if ( ! $this->minimum_args( $args, 3 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4363
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4364
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4365
		$this->escape( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4367
		$username    = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4368
		$password    = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4369
		$revision_id = (int) $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4370
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4371
		if ( ! $user = $this->login( $username, $password ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4372
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4373
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4374
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4375
		do_action( 'xmlrpc_call', 'wp.restoreRevision' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4376
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4377
		if ( ! $revision = wp_get_post_revision( $revision_id ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4378
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4379
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4380
		if ( wp_is_post_autosave( $revision ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4381
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4383
		if ( ! $post = get_post( $revision->post_parent ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4384
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4386
		if ( ! current_user_can( 'edit_post', $revision->post_parent ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4387
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4389
		// Check if revisions are disabled.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4390
		if ( ! wp_revisions_enabled( $post ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4391
			return new IXR_Error( 401, __( 'Sorry, revisions are disabled.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4393
		$post = wp_restore_post_revision( $revision_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4394
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4395
		return (bool) $post;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4396
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4397
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4398
	/* Blogger API functions.
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4399
	 * specs on http://plant.blogger.com/api and https://groups.yahoo.com/group/bloggerDev/
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4400
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4401
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4402
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4403
	 * Retrieve blogs that user owns.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4404
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4405
	 * Will make more sense once we support multiple blogs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4406
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4407
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4408
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4409
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4410
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4411
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4412
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4413
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4414
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4415
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4416
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4417
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4418
	public function blogger_getUsersBlogs($args) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4419
		if ( ! $this->minimum_args( $args, 3 ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4420
			return $this->error;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4421
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4422
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4423
		if ( is_multisite() ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4424
			return $this->_multisite_getUsersBlogs($args);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4425
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4426
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4427
		$this->escape($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4428
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4429
		$username = $args[1];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4430
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4431
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4432
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4433
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4434
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4435
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4436
		do_action( 'xmlrpc_call', 'blogger.getUsersBlogs' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4437
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4438
		$is_admin = current_user_can('manage_options');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4439
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4440
		$struct = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4441
			'isAdmin'  => $is_admin,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4442
			'url'      => get_option('home') . '/',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4443
			'blogid'   => '1',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4444
			'blogName' => get_option('blogname'),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4445
			'xmlrpc'   => site_url( 'xmlrpc.php', 'rpc' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4446
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4447
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4448
		return array($struct);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4449
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4450
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4451
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4452
	 * Private function for retrieving a users blogs for multisite setups
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4453
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4454
	 * @since 3.0.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4455
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4456
	 * @param array $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4457
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4458
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4459
	 *     @type string $username Username.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4460
	 *     @type string $password Password.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4461
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4462
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4463
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4464
	protected function _multisite_getUsersBlogs( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4465
		$current_blog = get_site();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4467
		$domain = $current_blog->domain;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4468
		$path = $current_blog->path . 'xmlrpc.php';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4469
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4470
		$rpc = new IXR_Client( set_url_scheme( "http://{$domain}{$path}" ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4471
		$rpc->query('wp.getUsersBlogs', $args[1], $args[2]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4472
		$blogs = $rpc->getResponse();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4474
		if ( isset($blogs['faultCode']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4475
			return new IXR_Error($blogs['faultCode'], $blogs['faultString']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4476
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4477
		if ( $_SERVER['HTTP_HOST'] == $domain && $_SERVER['REQUEST_URI'] == $path ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4478
			return $blogs;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4479
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4480
			foreach ( (array) $blogs as $blog ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4481
				if ( strpos($blog['url'], $_SERVER['HTTP_HOST']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4482
					return array($blog);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4483
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4484
			return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4485
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4486
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4487
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4488
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4489
	 * Retrieve user's data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4490
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4491
	 * Gives your client some info about you, so you don't have to.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4492
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4493
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4494
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4495
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4496
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4497
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4498
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4499
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4500
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4501
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4502
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4503
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4504
	public function blogger_getUserInfo( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4505
		$this->escape( $args );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4506
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4507
		$username = $args[1];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4508
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4509
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4510
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4511
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4512
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4513
		if ( !current_user_can( 'edit_posts' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4514
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to access user data on this site.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4515
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4516
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4517
		do_action( 'xmlrpc_call', 'blogger.getUserInfo' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4518
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4519
		$struct = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4520
			'nickname'  => $user->nickname,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4521
			'userid'    => $user->ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4522
			'url'       => $user->user_url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4523
			'lastname'  => $user->last_name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4524
			'firstname' => $user->first_name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4525
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4526
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4527
		return $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4528
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4530
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4531
	 * Retrieve post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4532
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4533
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4534
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4535
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4536
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4537
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4538
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4539
	 *     @type int    $post_ID
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4540
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4541
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4542
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4543
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4544
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4545
	public function blogger_getPost( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4546
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4547
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4548
		$post_ID  = (int) $args[1];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4549
		$username = $args[2];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4550
		$password = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4551
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4552
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4553
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4554
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4555
		$post_data = get_post($post_ID, ARRAY_A);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4556
		if ( ! $post_data )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4557
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4558
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4559
		if ( !current_user_can( 'edit_post', $post_ID ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4560
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4561
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4562
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4563
		do_action( 'xmlrpc_call', 'blogger.getPost' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4565
		$categories = implode(',', wp_get_post_categories($post_ID));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4566
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4567
		$content  = '<title>'.wp_unslash($post_data['post_title']).'</title>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4568
		$content .= '<category>'.$categories.'</category>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4569
		$content .= wp_unslash($post_data['post_content']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4570
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4571
		$struct = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4572
			'userid'    => $post_data['post_author'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4573
			'dateCreated' => $this->_convert_date( $post_data['post_date'] ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4574
			'content'     => $content,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4575
			'postid'  => (string) $post_data['ID']
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4576
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4577
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4578
		return $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4579
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4580
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4581
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4582
	 * Retrieve list of recent posts.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4583
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4584
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4585
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4586
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4587
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4588
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4589
	 *     @type string $appkey (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4590
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4591
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4592
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4593
	 *     @type int    $numberposts (optional)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4594
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4595
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4596
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4597
	public function blogger_getRecentPosts( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4598
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4599
		$this->escape($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4600
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4601
		// $args[0] = appkey - ignored
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4602
		$username = $args[2];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4603
		$password = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4604
		if ( isset( $args[4] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4605
			$query = array( 'numberposts' => absint( $args[4] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4606
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4607
			$query = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4608
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4609
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4610
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4611
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4612
		if ( ! current_user_can( 'edit_posts' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4613
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4614
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4615
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4616
		do_action( 'xmlrpc_call', 'blogger.getRecentPosts' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4617
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4618
		$posts_list = wp_get_recent_posts( $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4620
		if ( !$posts_list ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4621
			$this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4622
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4623
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4624
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4625
		$recent_posts = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4626
		foreach ($posts_list as $entry) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4627
			if ( !current_user_can( 'edit_post', $entry['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4628
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4630
			$post_date  = $this->_convert_date( $entry['post_date'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4631
			$categories = implode(',', wp_get_post_categories($entry['ID']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4632
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4633
			$content  = '<title>'.wp_unslash($entry['post_title']).'</title>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4634
			$content .= '<category>'.$categories.'</category>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4635
			$content .= wp_unslash($entry['post_content']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4636
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4637
			$recent_posts[] = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4638
				'userid' => $entry['post_author'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4639
				'dateCreated' => $post_date,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4640
				'content' => $content,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4641
				'postid' => (string) $entry['ID'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4642
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4643
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4644
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4645
		return $recent_posts;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4646
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4647
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4648
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4649
	 * Deprecated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4650
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4651
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4652
	 * @deprecated 3.5.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4653
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4654
	 * @param array $args Unused.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4655
	 * @return IXR_Error Error object.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4656
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4657
	public function blogger_getTemplate($args) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4658
		return new IXR_Error( 403, __('Sorry, that file cannot be edited.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4659
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4660
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4661
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4662
	 * Deprecated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4663
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4664
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4665
	 * @deprecated 3.5.0
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4666
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4667
	 * @param array $args Unused.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4668
	 * @return IXR_Error Error object.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4669
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4670
	public function blogger_setTemplate($args) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4671
		return new IXR_Error( 403, __('Sorry, that file cannot be edited.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4672
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4674
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4675
	 * Creates new post.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4676
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4677
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4678
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4679
	 * @param array $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4680
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4681
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4682
	 *     @type string $appkey (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4683
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4684
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4685
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4686
	 *     @type string $content
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4687
	 *     @type string $publish
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4688
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4689
	 * @return int|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4690
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4691
	public function blogger_newPost( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4692
		$this->escape( $args );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4693
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4694
		$username = $args[2];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4695
		$password = $args[3];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4696
		$content  = $args[4];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4697
		$publish  = $args[5];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4698
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4699
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4700
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4701
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4702
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4703
		do_action( 'xmlrpc_call', 'blogger.newPost' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4705
		$cap = ($publish) ? 'publish_posts' : 'edit_posts';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4706
		if ( ! current_user_can( get_post_type_object( 'post' )->cap->create_posts ) || !current_user_can($cap) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4707
			return new IXR_Error(401, __('Sorry, you are not allowed to post on this site.'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4708
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4709
		$post_status = ($publish) ? 'publish' : 'draft';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4710
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4711
		$post_author = $user->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4712
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4713
		$post_title = xmlrpc_getposttitle($content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4714
		$post_category = xmlrpc_getpostcategory($content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4715
		$post_content = xmlrpc_removepostdata($content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4716
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4717
		$post_date = current_time('mysql');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4718
		$post_date_gmt = current_time('mysql', 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4719
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4720
		$post_data = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4721
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4722
		$post_ID = wp_insert_post($post_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4723
		if ( is_wp_error( $post_ID ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4724
			return new IXR_Error(500, $post_ID->get_error_message());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4725
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4726
		if ( !$post_ID )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4727
			return new IXR_Error(500, __('Sorry, your entry could not be posted.'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4728
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4729
		$this->attach_uploads( $post_ID, $post_content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4730
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4731
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4732
		 * Fires after a new post has been successfully created via the XML-RPC Blogger API.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4733
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4734
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4735
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4736
		 * @param int   $post_ID ID of the new post.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4737
		 * @param array $args    An array of new post arguments.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4738
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4739
		do_action( 'xmlrpc_call_success_blogger_newPost', $post_ID, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4740
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4741
		return $post_ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4742
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4743
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4744
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4745
	 * Edit a post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4746
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4747
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4748
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4749
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4750
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4751
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4752
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4753
	 *     @type int    $post_ID
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4754
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4755
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4756
	 *     @type string $content
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4757
	 *     @type bool   $publish
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4758
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4759
	 * @return true|IXR_Error true when done.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4760
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4761
	public function blogger_editPost( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4762
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4763
		$this->escape($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4764
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4765
		$post_ID  = (int) $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4766
		$username = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4767
		$password = $args[3];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4768
		$content  = $args[4];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4769
		$publish  = $args[5];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4770
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4771
		if ( ! $user = $this->login( $username, $password ) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4772
			return $this->error;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4773
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4774
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4775
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4776
		do_action( 'xmlrpc_call', 'blogger.editPost' );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4777
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4778
		$actual_post = get_post( $post_ID, ARRAY_A );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4779
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4780
		if ( ! $actual_post || $actual_post['post_type'] != 'post' ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4781
			return new IXR_Error( 404, __( 'Sorry, no such post.' ) );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4782
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4783
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4784
		$this->escape($actual_post);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4785
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4786
		if ( ! current_user_can( 'edit_post', $post_ID ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4787
			return new IXR_Error(401, __('Sorry, you are not allowed to edit this post.'));
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4788
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4789
		if ( 'publish' == $actual_post['post_status'] && ! current_user_can( 'publish_posts' ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4790
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish this post.' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4791
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4792
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4793
		$postdata = array();
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4794
		$postdata['ID'] = $actual_post['ID'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4795
		$postdata['post_content'] = xmlrpc_removepostdata( $content );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4796
		$postdata['post_title'] = xmlrpc_getposttitle( $content );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4797
		$postdata['post_category'] = xmlrpc_getpostcategory( $content );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4798
		$postdata['post_status'] = $actual_post['post_status'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4799
		$postdata['post_excerpt'] = $actual_post['post_excerpt'];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4800
		$postdata['post_status'] = $publish ? 'publish' : 'draft';
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4801
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4802
		$result = wp_update_post( $postdata );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4803
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4804
		if ( ! $result ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4805
			return new IXR_Error(500, __('For some strange yet very annoying reason, this post could not be edited.'));
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4806
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4807
		$this->attach_uploads( $actual_post['ID'], $postdata['post_content'] );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4808
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4809
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4810
		 * Fires after a post has been successfully updated via the XML-RPC Blogger API.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4811
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4812
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4813
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4814
		 * @param int   $post_ID ID of the updated post.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4815
		 * @param array $args    An array of arguments for the post to edit.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4816
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4817
		do_action( 'xmlrpc_call_success_blogger_editPost', $post_ID, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4818
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4819
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4820
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4821
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4822
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4823
	 * Remove a post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4824
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4825
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4826
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4827
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4828
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4829
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4830
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4831
	 *     @type int    $post_ID
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4832
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4833
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4834
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4835
	 * @return true|IXR_Error True when post is deleted.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4836
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4837
	public function blogger_deletePost( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4838
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4839
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4840
		$post_ID  = (int) $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4841
		$username = $args[2];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4842
		$password = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4843
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4844
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4845
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4846
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4847
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4848
		do_action( 'xmlrpc_call', 'blogger.deletePost' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4849
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4850
		$actual_post = get_post( $post_ID, ARRAY_A );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4851
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4852
		if ( ! $actual_post || $actual_post['post_type'] != 'post' ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4853
			return new IXR_Error( 404, __( 'Sorry, no such post.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4854
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4855
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4856
		if ( ! current_user_can( 'delete_post', $post_ID ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4857
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this post.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4858
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4859
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4860
		$result = wp_delete_post( $post_ID );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4861
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4862
		if ( ! $result ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4863
			return new IXR_Error( 500, __( 'The post cannot be deleted.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4864
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4865
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4866
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4867
		 * Fires after a post has been successfully deleted via the XML-RPC Blogger API.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4868
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4869
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4870
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4871
		 * @param int   $post_ID ID of the deleted post.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4872
		 * @param array $args    An array of arguments to delete the post.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4873
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4874
		do_action( 'xmlrpc_call_success_blogger_deletePost', $post_ID, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4875
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4876
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4877
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4878
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4879
	/* MetaWeblog API functions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4880
	 * specs on wherever Dave Winer wants them to be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4881
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4883
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4884
	 * Create a new post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4885
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4886
	 * The 'content_struct' argument must contain:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4887
	 *  - title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4888
	 *  - description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4889
	 *  - mt_excerpt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4890
	 *  - mt_text_more
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4891
	 *  - mt_keywords
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4892
	 *  - mt_tb_ping_urls
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4893
	 *  - categories
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4894
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4895
	 * Also, it can optionally contain:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4896
	 *  - wp_slug
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4897
	 *  - wp_password
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4898
	 *  - wp_page_parent_id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4899
	 *  - wp_page_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4900
	 *  - wp_author_id
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4901
	 *  - post_status | page_status - can be 'draft', 'private', 'publish', or 'pending'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4902
	 *  - mt_allow_comments - can be 'open' or 'closed'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4903
	 *  - mt_allow_pings - can be 'open' or 'closed'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4904
	 *  - date_created_gmt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4905
	 *  - dateCreated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4906
	 *  - wp_post_thumbnail
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4907
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4908
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4909
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4910
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4911
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4912
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4913
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4914
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4915
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4916
	 *     @type array  $content_struct
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4917
	 *     @type int    $publish
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4918
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4919
	 * @return int|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4920
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4921
	public function mw_newPost($args) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4922
		$this->escape($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4923
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4924
		$username       = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4925
		$password       = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4926
		$content_struct = $args[3];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4927
		$publish        = isset( $args[4] ) ? $args[4] : 0;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4928
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4929
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4930
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4931
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4932
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  4933
		do_action( 'xmlrpc_call', 'metaWeblog.newPost' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4934
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4935
		$page_template = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4936
		if ( !empty( $content_struct['post_type'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4937
			if ( $content_struct['post_type'] == 'page' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4938
				if ( $publish )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4939
					$cap  = 'publish_pages';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4940
				elseif ( isset( $content_struct['page_status'] ) && 'publish' == $content_struct['page_status'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4941
					$cap  = 'publish_pages';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4942
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4943
					$cap = 'edit_pages';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4944
				$error_message = __( 'Sorry, you are not allowed to publish pages on this site.' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4945
				$post_type = 'page';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4946
				if ( !empty( $content_struct['wp_page_template'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4947
					$page_template = $content_struct['wp_page_template'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4948
			} elseif ( $content_struct['post_type'] == 'post' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4949
				if ( $publish )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4950
					$cap  = 'publish_posts';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4951
				elseif ( isset( $content_struct['post_status'] ) && 'publish' == $content_struct['post_status'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4952
					$cap  = 'publish_posts';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4953
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4954
					$cap = 'edit_posts';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4955
				$error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4956
				$post_type = 'post';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4957
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4958
				// No other post_type values are allowed here
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4959
				return new IXR_Error( 401, __( 'Invalid post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4960
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4961
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4962
			if ( $publish )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4963
				$cap  = 'publish_posts';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4964
			elseif ( isset( $content_struct['post_status'] ) && 'publish' == $content_struct['post_status'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4965
				$cap  = 'publish_posts';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4966
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4967
				$cap = 'edit_posts';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4968
			$error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4969
			$post_type = 'post';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4970
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4971
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4972
		if ( ! current_user_can( get_post_type_object( $post_type )->cap->create_posts ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4973
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish posts on this site.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4974
		if ( !current_user_can( $cap ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4975
			return new IXR_Error( 401, $error_message );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4976
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4977
		// Check for a valid post format if one was given
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4978
		if ( isset( $content_struct['wp_post_format'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4979
			$content_struct['wp_post_format'] = sanitize_key( $content_struct['wp_post_format'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4980
			if ( !array_key_exists( $content_struct['wp_post_format'], get_post_format_strings() ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  4981
				return new IXR_Error( 404, __( 'Invalid post format.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4982
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4983
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4984
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4985
		// Let WordPress generate the post_name (slug) unless
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4986
		// one has been provided.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4987
		$post_name = "";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4988
		if ( isset($content_struct['wp_slug']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4989
			$post_name = $content_struct['wp_slug'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4990
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4991
		// Only use a password if one was given.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4992
		if ( isset($content_struct['wp_password']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4993
			$post_password = $content_struct['wp_password'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4994
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4995
		// Only set a post parent if one was provided.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4996
		if ( isset($content_struct['wp_page_parent_id']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4997
			$post_parent = $content_struct['wp_page_parent_id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4998
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4999
		// Only set the menu_order if it was provided.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5000
		if ( isset($content_struct['wp_page_order']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5001
			$menu_order = $content_struct['wp_page_order'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5002
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5003
		$post_author = $user->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5004
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5005
		// If an author id was provided then use it instead.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5006
		if ( isset( $content_struct['wp_author_id'] ) && ( $user->ID != $content_struct['wp_author_id'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5007
			switch ( $post_type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5008
				case "post":
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5009
					if ( !current_user_can( 'edit_others_posts' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5010
						return new IXR_Error( 401, __( 'Sorry, you are not allowed to create posts as this user.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5011
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5012
				case "page":
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5013
					if ( !current_user_can( 'edit_others_pages' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5014
						return new IXR_Error( 401, __( 'Sorry, you are not allowed to create pages as this user.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5015
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5016
				default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5017
					return new IXR_Error( 401, __( 'Invalid post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5018
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5019
			$author = get_userdata( $content_struct['wp_author_id'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5020
			if ( ! $author )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5021
				return new IXR_Error( 404, __( 'Invalid author ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5022
			$post_author = $content_struct['wp_author_id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5023
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5024
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5025
		$post_title = isset( $content_struct['title'] ) ? $content_struct['title'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5026
		$post_content = isset( $content_struct['description'] ) ? $content_struct['description'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5027
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5028
		$post_status = $publish ? 'publish' : 'draft';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5029
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5030
		if ( isset( $content_struct["{$post_type}_status"] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5031
			switch ( $content_struct["{$post_type}_status"] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5032
				case 'draft':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5033
				case 'pending':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5034
				case 'private':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5035
				case 'publish':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5036
					$post_status = $content_struct["{$post_type}_status"];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5037
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5038
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5039
					$post_status = $publish ? 'publish' : 'draft';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5040
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5041
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5042
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5043
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5044
		$post_excerpt = isset($content_struct['mt_excerpt']) ? $content_struct['mt_excerpt'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5045
		$post_more = isset($content_struct['mt_text_more']) ? $content_struct['mt_text_more'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5046
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5047
		$tags_input = isset($content_struct['mt_keywords']) ? $content_struct['mt_keywords'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5049
		if ( isset($content_struct['mt_allow_comments']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5050
			if ( !is_numeric($content_struct['mt_allow_comments']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5051
				switch ( $content_struct['mt_allow_comments'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5052
					case 'closed':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5053
						$comment_status = 'closed';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5054
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5055
					case 'open':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5056
						$comment_status = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5057
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5058
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5059
						$comment_status = get_default_comment_status( $post_type );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5060
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5061
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5062
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5063
				switch ( (int) $content_struct['mt_allow_comments'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5064
					case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5065
					case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5066
						$comment_status = 'closed';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5067
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5068
					case 1:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5069
						$comment_status = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5070
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5071
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5072
						$comment_status = get_default_comment_status( $post_type );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5073
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5074
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5075
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5076
		} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5077
			$comment_status = get_default_comment_status( $post_type );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5078
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5079
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5080
		if ( isset($content_struct['mt_allow_pings']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5081
			if ( !is_numeric($content_struct['mt_allow_pings']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5082
				switch ( $content_struct['mt_allow_pings'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5083
					case 'closed':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5084
						$ping_status = 'closed';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5085
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5086
					case 'open':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5087
						$ping_status = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5088
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5089
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5090
						$ping_status = get_default_comment_status( $post_type, 'pingback' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5091
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5092
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5093
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5094
				switch ( (int) $content_struct['mt_allow_pings'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5095
					case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5096
						$ping_status = 'closed';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5097
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5098
					case 1:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5099
						$ping_status = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5100
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5101
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5102
						$ping_status = get_default_comment_status( $post_type, 'pingback' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5103
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5104
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5105
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5106
		} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5107
			$ping_status = get_default_comment_status( $post_type, 'pingback' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5108
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5110
		if ( $post_more )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5111
			$post_content = $post_content . '<!--more-->' . $post_more;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5112
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5113
		$to_ping = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5114
		if ( isset( $content_struct['mt_tb_ping_urls'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5115
			$to_ping = $content_struct['mt_tb_ping_urls'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5116
			if ( is_array($to_ping) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5117
				$to_ping = implode(' ', $to_ping);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5118
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5119
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5120
		// Do some timestamp voodoo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5121
		if ( !empty( $content_struct['date_created_gmt'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5122
			// We know this is supposed to be GMT, so we're going to slap that Z on there by force
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5123
			$dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5124
		elseif ( !empty( $content_struct['dateCreated']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5125
			$dateCreated = $content_struct['dateCreated']->getIso();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5127
		if ( !empty( $dateCreated ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5128
			$post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5129
			$post_date_gmt = iso8601_to_datetime($dateCreated, 'GMT');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5130
		} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5131
			$post_date = '';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5132
			$post_date_gmt = '';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5133
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5135
		$post_category = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5136
		if ( isset( $content_struct['categories'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5137
			$catnames = $content_struct['categories'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5138
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5139
			if ( is_array($catnames) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5140
				foreach ($catnames as $cat) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5141
					$post_category[] = get_cat_ID($cat);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5142
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5143
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5144
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5145
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5146
		$postdata = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'to_ping', 'post_type', 'post_name', 'post_password', 'post_parent', 'menu_order', 'tags_input', 'page_template');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5147
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5148
		$post_ID = $postdata['ID'] = get_default_post_to_edit( $post_type, true )->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5149
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5150
		// Only posts can be sticky
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5151
		if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5152
			$data = $postdata;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5153
			$data['sticky'] = $content_struct['sticky'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5154
			$error = $this->_toggle_sticky( $data );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5155
			if ( $error ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5156
				return $error;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5157
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5158
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5159
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5160
		if ( isset($content_struct['custom_fields']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5161
			$this->set_custom_fields($post_ID, $content_struct['custom_fields']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5162
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5163
		if ( isset ( $content_struct['wp_post_thumbnail'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5164
			if ( set_post_thumbnail( $post_ID, $content_struct['wp_post_thumbnail'] ) === false )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5165
				return new IXR_Error( 404, __( 'Invalid attachment ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5166
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5167
			unset( $content_struct['wp_post_thumbnail'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5168
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5169
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5170
		// Handle enclosures
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5171
		$thisEnclosure = isset($content_struct['enclosure']) ? $content_struct['enclosure'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5172
		$this->add_enclosure_if_new($post_ID, $thisEnclosure);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5174
		$this->attach_uploads( $post_ID, $post_content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5176
		// Handle post formats if assigned, value is validated earlier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5177
		// in this function
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5178
		if ( isset( $content_struct['wp_post_format'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5179
			set_post_format( $post_ID, $content_struct['wp_post_format'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5180
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5181
		$post_ID = wp_insert_post( $postdata, true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5182
		if ( is_wp_error( $post_ID ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5183
			return new IXR_Error(500, $post_ID->get_error_message());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5185
		if ( !$post_ID )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5186
			return new IXR_Error(500, __('Sorry, your entry could not be posted.'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5187
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5188
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5189
		 * Fires after a new post has been successfully created via the XML-RPC MovableType API.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5190
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5191
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5192
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5193
		 * @param int   $post_ID ID of the new post.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5194
		 * @param array $args    An array of arguments to create the new post.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5195
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5196
		do_action( 'xmlrpc_call_success_mw_newPost', $post_ID, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5198
		return strval($post_ID);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5199
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5200
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5201
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5202
	 * Adds an enclosure to a post if it's new.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5203
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5204
	 * @since 2.8.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5205
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5206
	 * @param integer $post_ID   Post ID.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5207
	 * @param array   $enclosure Enclosure data.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5208
	 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5209
	public function add_enclosure_if_new( $post_ID, $enclosure ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5210
		if ( is_array( $enclosure ) && isset( $enclosure['url'] ) && isset( $enclosure['length'] ) && isset( $enclosure['type'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5211
			$encstring = $enclosure['url'] . "\n" . $enclosure['length'] . "\n" . $enclosure['type'] . "\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5212
			$found = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5213
			if ( $enclosures = get_post_meta( $post_ID, 'enclosure' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5214
				foreach ( $enclosures as $enc ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5215
					// This method used to omit the trailing new line. #23219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5216
					if ( rtrim( $enc, "\n" ) == rtrim( $encstring, "\n" ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5217
						$found = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5218
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5219
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5220
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5221
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5222
			if ( ! $found )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5223
				add_post_meta( $post_ID, 'enclosure', $encstring );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5224
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5225
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5227
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5228
	 * Attach upload to a post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5229
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5230
	 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5231
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5232
	 * @global wpdb $wpdb WordPress database abstraction object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5233
	 *
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5234
	 * @param int $post_ID Post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5235
	 * @param string $post_content Post Content for attachment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5236
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5237
	public function attach_uploads( $post_ID, $post_content ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5238
		global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5239
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5240
		// find any unattached files
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5241
		$attachments = $wpdb->get_results( "SELECT ID, guid FROM {$wpdb->posts} WHERE post_parent = '0' AND post_type = 'attachment'" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5242
		if ( is_array( $attachments ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5243
			foreach ( $attachments as $file ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5244
				if ( ! empty( $file->guid ) && strpos( $post_content, $file->guid ) !== false )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5245
					$wpdb->update($wpdb->posts, array('post_parent' => $post_ID), array('ID' => $file->ID) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5246
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5247
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5248
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5249
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5250
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5251
	 * Edit a post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5252
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5253
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5254
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5255
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5256
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5257
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5258
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5259
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5260
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5261
	 *     @type array  $content_struct
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5262
	 *     @type int    $publish
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5263
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5264
	 * @return bool|IXR_Error True on success.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5265
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5266
	public function mw_editPost( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5267
		$this->escape( $args );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5268
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5269
		$post_ID        = (int) $args[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5270
		$username       = $args[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5271
		$password       = $args[2];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5272
		$content_struct = $args[3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5273
		$publish        = isset( $args[4] ) ? $args[4] : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5274
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5275
		if ( ! $user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5276
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5277
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5278
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5279
		do_action( 'xmlrpc_call', 'metaWeblog.editPost' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5280
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5281
		$postdata = get_post( $post_ID, ARRAY_A );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5282
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5283
		/*
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5284
		 * If there is no post data for the give post id, stop now and return an error.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5285
		 * Otherwise a new post will be created (which was the old behavior).
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5286
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5287
		if ( ! $postdata || empty( $postdata[ 'ID' ] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5288
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5290
		if ( ! current_user_can( 'edit_post', $post_ID ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5291
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5292
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5293
		// Use wp.editPost to edit post types other than post and page.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5294
		if ( ! in_array( $postdata[ 'post_type' ], array( 'post', 'page' ) ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5295
			return new IXR_Error( 401, __( 'Invalid post type.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5296
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5297
		// Thwart attempt to change the post type.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5298
		if ( ! empty( $content_struct[ 'post_type' ] ) && ( $content_struct['post_type'] != $postdata[ 'post_type' ] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5299
			return new IXR_Error( 401, __( 'The post type may not be changed.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5300
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5301
		// Check for a valid post format if one was given
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5302
		if ( isset( $content_struct['wp_post_format'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5303
			$content_struct['wp_post_format'] = sanitize_key( $content_struct['wp_post_format'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5304
			if ( !array_key_exists( $content_struct['wp_post_format'], get_post_format_strings() ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5305
				return new IXR_Error( 404, __( 'Invalid post format.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5306
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5307
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5309
		$this->escape($postdata);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5310
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5311
		$ID = $postdata['ID'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5312
		$post_content = $postdata['post_content'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5313
		$post_title = $postdata['post_title'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5314
		$post_excerpt = $postdata['post_excerpt'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5315
		$post_password = $postdata['post_password'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5316
		$post_parent = $postdata['post_parent'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5317
		$post_type = $postdata['post_type'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5318
		$menu_order = $postdata['menu_order'];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5320
		// Let WordPress manage slug if none was provided.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5321
		$post_name = $postdata['post_name'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5322
		if ( isset($content_struct['wp_slug']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5323
			$post_name = $content_struct['wp_slug'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5325
		// Only use a password if one was given.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5326
		if ( isset($content_struct['wp_password']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5327
			$post_password = $content_struct['wp_password'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5328
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5329
		// Only set a post parent if one was given.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5330
		if ( isset($content_struct['wp_page_parent_id']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5331
			$post_parent = $content_struct['wp_page_parent_id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5332
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5333
		// Only set the menu_order if it was given.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5334
		if ( isset($content_struct['wp_page_order']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5335
			$menu_order = $content_struct['wp_page_order'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5336
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5337
		$page_template = null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5338
		if ( ! empty( $content_struct['wp_page_template'] ) && 'page' == $post_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5339
			$page_template = $content_struct['wp_page_template'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5340
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5341
		$post_author = $postdata['post_author'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5342
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5343
		// Only set the post_author if one is set.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5344
		if ( isset( $content_struct['wp_author_id'] ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5345
			// Check permissions if attempting to switch author to or from another user.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5346
			if ( $user->ID != $content_struct['wp_author_id'] || $user->ID != $post_author ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5347
				switch ( $post_type ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5348
					case 'post':
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5349
						if ( ! current_user_can( 'edit_others_posts' ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5350
							return new IXR_Error( 401, __( 'Sorry, you are not allowed to change the post author as this user.' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5351
						}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5352
						break;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5353
					case 'page':
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5354
						if ( ! current_user_can( 'edit_others_pages' ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5355
							return new IXR_Error( 401, __( 'Sorry, you are not allowed to change the page author as this user.' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5356
						}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5357
						break;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5358
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5359
						return new IXR_Error( 401, __( 'Invalid post type.' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5360
				}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5361
				$post_author = $content_struct['wp_author_id'];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5362
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5363
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5364
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5365
		if ( isset($content_struct['mt_allow_comments']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5366
			if ( !is_numeric($content_struct['mt_allow_comments']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5367
				switch ( $content_struct['mt_allow_comments'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5368
					case 'closed':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5369
						$comment_status = 'closed';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5370
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5371
					case 'open':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5372
						$comment_status = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5373
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5374
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5375
						$comment_status = get_default_comment_status( $post_type );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5376
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5377
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5378
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5379
				switch ( (int) $content_struct['mt_allow_comments'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5380
					case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5381
					case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5382
						$comment_status = 'closed';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5383
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5384
					case 1:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5385
						$comment_status = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5386
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5387
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5388
						$comment_status = get_default_comment_status( $post_type );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5389
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5390
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5391
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5392
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5393
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5394
		if ( isset($content_struct['mt_allow_pings']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5395
			if ( !is_numeric($content_struct['mt_allow_pings']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5396
				switch ( $content_struct['mt_allow_pings'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5397
					case 'closed':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5398
						$ping_status = 'closed';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5399
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5400
					case 'open':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5401
						$ping_status = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5402
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5403
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5404
						$ping_status = get_default_comment_status( $post_type, 'pingback' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5405
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5406
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5407
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5408
				switch ( (int) $content_struct["mt_allow_pings"] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5409
					case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5410
						$ping_status = 'closed';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5411
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5412
					case 1:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5413
						$ping_status = 'open';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5414
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5415
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5416
						$ping_status = get_default_comment_status( $post_type, 'pingback' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5417
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5418
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5419
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5420
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5421
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5422
		if ( isset( $content_struct['title'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5423
			$post_title =  $content_struct['title'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5424
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5425
		if ( isset( $content_struct['description'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5426
			$post_content = $content_struct['description'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5427
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5428
		$post_category = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5429
		if ( isset( $content_struct['categories'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5430
			$catnames = $content_struct['categories'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5431
			if ( is_array($catnames) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5432
				foreach ($catnames as $cat) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5433
					$post_category[] = get_cat_ID($cat);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5434
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5435
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5436
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5437
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5438
		if ( isset( $content_struct['mt_excerpt'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5439
			$post_excerpt =  $content_struct['mt_excerpt'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5440
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5441
		$post_more = isset( $content_struct['mt_text_more'] ) ? $content_struct['mt_text_more'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5442
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5443
		$post_status = $publish ? 'publish' : 'draft';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5444
		if ( isset( $content_struct["{$post_type}_status"] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5445
			switch( $content_struct["{$post_type}_status"] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5446
				case 'draft':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5447
				case 'pending':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5448
				case 'private':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5449
				case 'publish':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5450
					$post_status = $content_struct["{$post_type}_status"];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5451
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5452
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5453
					$post_status = $publish ? 'publish' : 'draft';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5454
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5455
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5456
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5457
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5458
		$tags_input = isset( $content_struct['mt_keywords'] ) ? $content_struct['mt_keywords'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5459
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5460
		if ( 'publish' == $post_status || 'private' == $post_status ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5461
			if ( 'page' == $post_type && ! current_user_can( 'publish_pages' ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5462
				return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish this page.' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5463
			} elseif ( ! current_user_can( 'publish_posts' ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5464
				return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish this post.' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5465
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5466
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5467
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5468
		if ( $post_more )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5469
			$post_content = $post_content . "<!--more-->" . $post_more;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5470
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5471
		$to_ping = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5472
		if ( isset( $content_struct['mt_tb_ping_urls'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5473
			$to_ping = $content_struct['mt_tb_ping_urls'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5474
			if ( is_array($to_ping) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5475
				$to_ping = implode(' ', $to_ping);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5476
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5477
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5478
		// Do some timestamp voodoo.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5479
		if ( !empty( $content_struct['date_created_gmt'] ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5480
			// We know this is supposed to be GMT, so we're going to slap that Z on there by force.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5481
			$dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5482
		elseif ( !empty( $content_struct['dateCreated']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5483
			$dateCreated = $content_struct['dateCreated']->getIso();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5484
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5485
		// Default to not flagging the post date to be edited unless it's intentional.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5486
		$edit_date = false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5487
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5488
		if ( !empty( $dateCreated ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5489
			$post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5490
			$post_date_gmt = iso8601_to_datetime($dateCreated, 'GMT');
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5491
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5492
			// Flag the post date to be edited.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5493
			$edit_date = true;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5494
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5495
			$post_date     = $postdata['post_date'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5496
			$post_date_gmt = $postdata['post_date_gmt'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5497
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5498
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5499
		// We've got all the data -- post it.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5500
		$newpost = compact('ID', 'post_content', 'post_title', 'post_category', 'post_status', 'post_excerpt', 'comment_status', 'ping_status', 'edit_date', 'post_date', 'post_date_gmt', 'to_ping', 'post_name', 'post_password', 'post_parent', 'menu_order', 'post_author', 'tags_input', 'page_template');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5501
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5502
		$result = wp_update_post($newpost, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5503
		if ( is_wp_error( $result ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5504
			return new IXR_Error(500, $result->get_error_message());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5505
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5506
		if ( !$result )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5507
			return new IXR_Error(500, __('Sorry, your entry could not be edited.'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5508
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5509
		// Only posts can be sticky
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5510
		if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5511
			$data = $newpost;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5512
			$data['sticky'] = $content_struct['sticky'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5513
			$data['post_type'] = 'post';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5514
			$error = $this->_toggle_sticky( $data, true );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5515
			if ( $error ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5516
				return $error;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5517
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5518
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5519
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5520
		if ( isset($content_struct['custom_fields']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5521
			$this->set_custom_fields($post_ID, $content_struct['custom_fields']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5522
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5523
		if ( isset ( $content_struct['wp_post_thumbnail'] ) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5524
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5525
			// Empty value deletes, non-empty value adds/updates.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5526
			if ( empty( $content_struct['wp_post_thumbnail'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5527
				delete_post_thumbnail( $post_ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5528
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5529
				if ( set_post_thumbnail( $post_ID, $content_struct['wp_post_thumbnail'] ) === false )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5530
					return new IXR_Error( 404, __( 'Invalid attachment ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5531
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5532
			unset( $content_struct['wp_post_thumbnail'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5533
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5534
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5535
		// Handle enclosures.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5536
		$thisEnclosure = isset($content_struct['enclosure']) ? $content_struct['enclosure'] : null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5537
		$this->add_enclosure_if_new($post_ID, $thisEnclosure);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5538
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5539
		$this->attach_uploads( $ID, $post_content );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5540
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5541
		// Handle post formats if assigned, validation is handled earlier in this function.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5542
		if ( isset( $content_struct['wp_post_format'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5543
			set_post_format( $post_ID, $content_struct['wp_post_format'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5544
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5545
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5546
		 * Fires after a post has been successfully updated via the XML-RPC MovableType API.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5547
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5548
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5549
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5550
		 * @param int   $post_ID ID of the updated post.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5551
		 * @param array $args    An array of arguments to update the post.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5552
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5553
		do_action( 'xmlrpc_call_success_mw_editPost', $post_ID, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5554
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5555
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5556
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5557
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5558
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5559
	 * Retrieve post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5560
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5561
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5562
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5563
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5564
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5565
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5566
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5567
	 *     @type int    $post_ID
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5568
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5569
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5570
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5571
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5572
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5573
	public function mw_getPost( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5574
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5575
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5576
		$post_ID  = (int) $args[0];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5577
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5578
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5579
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5580
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5581
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5582
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5583
		$postdata = get_post($post_ID, ARRAY_A);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5584
		if ( ! $postdata )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5585
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5586
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5587
		if ( !current_user_can( 'edit_post', $post_ID ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5588
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5589
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5590
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5591
		do_action( 'xmlrpc_call', 'metaWeblog.getPost' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5593
		if ($postdata['post_date'] != '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5594
			$post_date = $this->_convert_date( $postdata['post_date'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5595
			$post_date_gmt = $this->_convert_date_gmt( $postdata['post_date_gmt'],  $postdata['post_date'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5596
			$post_modified = $this->_convert_date( $postdata['post_modified'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5597
			$post_modified_gmt = $this->_convert_date_gmt( $postdata['post_modified_gmt'], $postdata['post_modified'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5598
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5599
			$categories = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5600
			$catids = wp_get_post_categories($post_ID);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5601
			foreach ($catids as $catid)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5602
				$categories[] = get_cat_name($catid);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5604
			$tagnames = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5605
			$tags = wp_get_post_tags( $post_ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5606
			if ( !empty( $tags ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5607
				foreach ( $tags as $tag )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5608
					$tagnames[] = $tag->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5609
				$tagnames = implode( ', ', $tagnames );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5610
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5611
				$tagnames = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5612
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5613
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5614
			$post = get_extended($postdata['post_content']);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5615
			$link = get_permalink($postdata['ID']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5616
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5617
			// Get the author info.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5618
			$author = get_userdata($postdata['post_author']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5620
			$allow_comments = ('open' == $postdata['comment_status']) ? 1 : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5621
			$allow_pings = ('open' == $postdata['ping_status']) ? 1 : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5623
			// Consider future posts as published
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5624
			if ( $postdata['post_status'] === 'future' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5625
				$postdata['post_status'] = 'publish';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5626
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5627
			// Get post format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5628
			$post_format = get_post_format( $post_ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5629
			if ( empty( $post_format ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5630
				$post_format = 'standard';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5631
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5632
			$sticky = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5633
			if ( is_sticky( $post_ID ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5634
				$sticky = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5635
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5636
			$enclosure = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5637
			foreach ( (array) get_post_custom($post_ID) as $key => $val) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5638
				if ($key == 'enclosure') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5639
					foreach ( (array) $val as $enc ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5640
						$encdata = explode("\n", $enc);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5641
						$enclosure['url'] = trim(htmlspecialchars($encdata[0]));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5642
						$enclosure['length'] = (int) trim($encdata[1]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5643
						$enclosure['type'] = trim($encdata[2]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5644
						break 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5645
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5646
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5647
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5648
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5649
			$resp = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5650
				'dateCreated' => $post_date,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5651
				'userid' => $postdata['post_author'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5652
				'postid' => $postdata['ID'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5653
				'description' => $post['main'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5654
				'title' => $postdata['post_title'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5655
				'link' => $link,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5656
				'permaLink' => $link,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5657
				// commented out because no other tool seems to use this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5658
				//	      'content' => $entry['post_content'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5659
				'categories' => $categories,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5660
				'mt_excerpt' => $postdata['post_excerpt'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5661
				'mt_text_more' => $post['extended'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5662
				'wp_more_text' => $post['more_text'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5663
				'mt_allow_comments' => $allow_comments,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5664
				'mt_allow_pings' => $allow_pings,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5665
				'mt_keywords' => $tagnames,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5666
				'wp_slug' => $postdata['post_name'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5667
				'wp_password' => $postdata['post_password'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5668
				'wp_author_id' => (string) $author->ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5669
				'wp_author_display_name' => $author->display_name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5670
				'date_created_gmt' => $post_date_gmt,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5671
				'post_status' => $postdata['post_status'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5672
				'custom_fields' => $this->get_custom_fields($post_ID),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5673
				'wp_post_format' => $post_format,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5674
				'sticky' => $sticky,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5675
				'date_modified' => $post_modified,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5676
				'date_modified_gmt' => $post_modified_gmt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5677
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5678
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5679
			if ( !empty($enclosure) ) $resp['enclosure'] = $enclosure;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5680
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5681
			$resp['wp_post_thumbnail'] = get_post_thumbnail_id( $postdata['ID'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5682
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5683
			return $resp;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5684
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5685
			return new IXR_Error(404, __('Sorry, no such post.'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5686
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5687
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5688
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5689
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5690
	 * Retrieve list of recent posts.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5691
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5692
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5693
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5694
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5695
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5696
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5697
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5698
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5699
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5700
	 *     @type int    $numberposts
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5701
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5702
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5703
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5704
	public function mw_getRecentPosts( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5705
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5706
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5707
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5708
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5709
		if ( isset( $args[3] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5710
			$query = array( 'numberposts' => absint( $args[3] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5711
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5712
			$query = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5713
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5714
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5715
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5716
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5717
		if ( ! current_user_can( 'edit_posts' ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5718
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5719
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5720
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5721
		do_action( 'xmlrpc_call', 'metaWeblog.getRecentPosts' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5722
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5723
		$posts_list = wp_get_recent_posts( $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5724
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5725
		if ( !$posts_list )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5726
			return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5727
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5728
		$recent_posts = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5729
		foreach ($posts_list as $entry) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5730
			if ( !current_user_can( 'edit_post', $entry['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5731
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5732
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5733
			$post_date = $this->_convert_date( $entry['post_date'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5734
			$post_date_gmt = $this->_convert_date_gmt( $entry['post_date_gmt'], $entry['post_date'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5735
			$post_modified = $this->_convert_date( $entry['post_modified'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5736
			$post_modified_gmt = $this->_convert_date_gmt( $entry['post_modified_gmt'], $entry['post_modified'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5737
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5738
			$categories = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5739
			$catids = wp_get_post_categories($entry['ID']);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5740
			foreach ( $catids as $catid )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5741
				$categories[] = get_cat_name($catid);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5742
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5743
			$tagnames = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5744
			$tags = wp_get_post_tags( $entry['ID'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5745
			if ( !empty( $tags ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5746
				foreach ( $tags as $tag ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5747
					$tagnames[] = $tag->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5748
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5749
				$tagnames = implode( ', ', $tagnames );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5750
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5751
				$tagnames = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5752
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5753
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5754
			$post = get_extended($entry['post_content']);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5755
			$link = get_permalink($entry['ID']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5757
			// Get the post author info.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5758
			$author = get_userdata($entry['post_author']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5759
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5760
			$allow_comments = ('open' == $entry['comment_status']) ? 1 : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5761
			$allow_pings = ('open' == $entry['ping_status']) ? 1 : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5762
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5763
			// Consider future posts as published
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5764
			if ( $entry['post_status'] === 'future' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5765
				$entry['post_status'] = 'publish';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5766
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5767
			// Get post format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5768
			$post_format = get_post_format( $entry['ID'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5769
			if ( empty( $post_format ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5770
				$post_format = 'standard';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5771
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5772
			$recent_posts[] = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5773
				'dateCreated' => $post_date,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5774
				'userid' => $entry['post_author'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5775
				'postid' => (string) $entry['ID'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5776
				'description' => $post['main'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5777
				'title' => $entry['post_title'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5778
				'link' => $link,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5779
				'permaLink' => $link,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5780
				// commented out because no other tool seems to use this
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5781
				// 'content' => $entry['post_content'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5782
				'categories' => $categories,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5783
				'mt_excerpt' => $entry['post_excerpt'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5784
				'mt_text_more' => $post['extended'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5785
				'wp_more_text' => $post['more_text'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5786
				'mt_allow_comments' => $allow_comments,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5787
				'mt_allow_pings' => $allow_pings,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5788
				'mt_keywords' => $tagnames,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5789
				'wp_slug' => $entry['post_name'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5790
				'wp_password' => $entry['post_password'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5791
				'wp_author_id' => (string) $author->ID,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5792
				'wp_author_display_name' => $author->display_name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5793
				'date_created_gmt' => $post_date_gmt,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5794
				'post_status' => $entry['post_status'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5795
				'custom_fields' => $this->get_custom_fields($entry['ID']),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5796
				'wp_post_format' => $post_format,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5797
				'date_modified' => $post_modified,
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5798
				'date_modified_gmt' => $post_modified_gmt,
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5799
				'sticky' => ( $entry['post_type'] === 'post' && is_sticky( $entry['ID'] ) ),
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5800
				'wp_post_thumbnail' => get_post_thumbnail_id( $entry['ID'] )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5801
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5802
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5803
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5804
		return $recent_posts;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5805
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5806
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5807
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5808
	 * Retrieve the list of categories on a given blog.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5809
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5810
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5811
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5812
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5813
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5814
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5815
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5816
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5817
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5818
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5819
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5820
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5821
	public function mw_getCategories( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5822
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5823
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5824
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5825
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5826
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5827
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5828
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5829
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5830
		if ( !current_user_can( 'edit_posts' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5831
			return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view categories.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5832
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5833
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5834
		do_action( 'xmlrpc_call', 'metaWeblog.getCategories' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5835
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5836
		$categories_struct = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5837
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5838
		if ( $cats = get_categories(array('get' => 'all')) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5839
			foreach ( $cats as $cat ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5840
				$struct = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5841
				$struct['categoryId'] = $cat->term_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5842
				$struct['parentId'] = $cat->parent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5843
				$struct['description'] = $cat->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5844
				$struct['categoryDescription'] = $cat->description;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5845
				$struct['categoryName'] = $cat->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5846
				$struct['htmlUrl'] = esc_html(get_category_link($cat->term_id));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5847
				$struct['rssUrl'] = esc_html(get_category_feed_link($cat->term_id, 'rss2'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5848
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5849
				$categories_struct[] = $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5850
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5851
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5852
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5853
		return $categories_struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5854
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5855
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5856
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5857
	 * Uploads a file, following your settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5858
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5859
	 * Adapted from a patch by Johann Richard.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5860
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5861
	 * @link http://mycvs.org/archives/2004/06/30/file-upload-to-wordpress-in-ecto/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5862
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5863
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5864
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5865
	 * @global wpdb $wpdb WordPress database abstraction object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5866
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5867
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5868
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5869
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5870
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5871
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5872
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5873
	 *     @type array  $data
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5874
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5875
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5876
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5877
	public function mw_newMediaObject( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5878
		global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5879
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5880
		$username = $this->escape( $args[1] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5881
		$password = $this->escape( $args[2] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5882
		$data     = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5883
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5884
		$name = sanitize_file_name( $data['name'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5885
		$type = $data['type'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5886
		$bits = $data['bits'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5887
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5888
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5889
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5890
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5891
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5892
		do_action( 'xmlrpc_call', 'metaWeblog.newMediaObject' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5893
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5894
		if ( !current_user_can('upload_files') ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5895
			$this->error = new IXR_Error( 401, __( 'Sorry, you are not allowed to upload files.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5896
			return $this->error;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5897
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5898
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5899
		if ( is_multisite() && upload_is_user_over_quota( false ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5900
			$this->error = new IXR_Error( 401, __( 'Sorry, you have used your space allocation.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5901
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5902
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5903
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5904
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5905
		 * Filters whether to preempt the XML-RPC media upload.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5906
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5907
		 * Passing a truthy value will effectively short-circuit the media upload,
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5908
		 * returning that value as a 500 error instead.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5909
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5910
		 * @since 2.1.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5911
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5912
		 * @param bool $error Whether to pre-empt the media upload. Default false.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5913
		 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5914
		if ( $upload_err = apply_filters( 'pre_upload_error', false ) ) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5915
			return new IXR_Error( 500, $upload_err );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5916
		}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5917
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5918
		$upload = wp_upload_bits($name, null, $bits);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5919
		if ( ! empty($upload['error']) ) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5920
			/* translators: 1: file name, 2: error message */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5921
			$errorString = sprintf( __( 'Could not write file %1$s (%2$s).' ), $name, $upload['error'] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5922
			return new IXR_Error( 500, $errorString );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5923
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5924
		// Construct the attachment array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5925
		$post_id = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5926
		if ( ! empty( $data['post_id'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5927
			$post_id = (int) $data['post_id'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5928
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5929
			if ( ! current_user_can( 'edit_post', $post_id ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5930
				return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5931
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5932
		$attachment = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5933
			'post_title' => $name,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5934
			'post_content' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5935
			'post_type' => 'attachment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5936
			'post_parent' => $post_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5937
			'post_mime_type' => $type,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5938
			'guid' => $upload[ 'url' ]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5939
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5940
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5941
		// Save the data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5942
		$id = wp_insert_attachment( $attachment, $upload[ 'file' ], $post_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5943
		wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $upload['file'] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5944
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5945
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5946
		 * Fires after a new attachment has been added via the XML-RPC MovableType API.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5947
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5948
		 * @since 3.4.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5949
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5950
		 * @param int   $id   ID of the new attachment.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5951
		 * @param array $args An array of arguments to add the attachment.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5952
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5953
		do_action( 'xmlrpc_call_success_mw_newMediaObject', $id, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5954
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5955
		$struct = $this->_prepare_media_item( get_post( $id ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5956
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5957
		// Deprecated values
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5958
		$struct['id']   = $struct['attachment_id'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5959
		$struct['file'] = $struct['title'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5960
		$struct['url']  = $struct['link'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5961
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5962
		return $struct;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5963
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5964
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5965
	/* MovableType API functions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5966
	 * specs on http://www.movabletype.org/docs/mtmanual_programmatic.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5967
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5968
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5969
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5970
	 * Retrieve the post titles of recent posts.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5971
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5972
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5973
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5974
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5975
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5976
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5977
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5978
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5979
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5980
	 *     @type int    $numberposts
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5981
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5982
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5983
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5984
	public function mt_getRecentPostTitles( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5985
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5986
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5987
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  5988
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5989
		if ( isset( $args[3] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5990
			$query = array( 'numberposts' => absint( $args[3] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5991
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5992
			$query = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5993
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5994
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5995
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5996
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5997
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  5998
		do_action( 'xmlrpc_call', 'mt.getRecentPostTitles' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5999
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6000
		$posts_list = wp_get_recent_posts( $query );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6001
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6002
		if ( !$posts_list ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6003
			$this->error = new IXR_Error(500, __('Either there are no posts, or something went wrong.'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6004
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6005
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6006
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6007
		$recent_posts = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6008
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6009
		foreach ($posts_list as $entry) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6010
			if ( !current_user_can( 'edit_post', $entry['ID'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6011
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6012
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6013
			$post_date = $this->_convert_date( $entry['post_date'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6014
			$post_date_gmt = $this->_convert_date_gmt( $entry['post_date_gmt'], $entry['post_date'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6015
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6016
			$recent_posts[] = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6017
				'dateCreated' => $post_date,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6018
				'userid' => $entry['post_author'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6019
				'postid' => (string) $entry['ID'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6020
				'title' => $entry['post_title'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6021
				'post_status' => $entry['post_status'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6022
				'date_created_gmt' => $post_date_gmt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6023
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6024
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6025
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6026
		return $recent_posts;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6027
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6028
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6029
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6030
	 * Retrieve list of all categories on blog.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6031
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6032
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6033
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6034
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6035
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6036
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6037
	 *     @type int    $blog_id (unused)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6038
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6039
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6040
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6041
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6042
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6043
	public function mt_getCategoryList( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6044
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6045
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6046
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6047
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6048
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6049
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6050
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6051
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6052
		if ( !current_user_can( 'edit_posts' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6053
			return new IXR_Error( 401, __( 'Sorry, you must be able to edit posts on this site in order to view categories.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6054
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6055
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6056
		do_action( 'xmlrpc_call', 'mt.getCategoryList' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6057
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6058
		$categories_struct = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6059
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6060
		if ( $cats = get_categories(array('hide_empty' => 0, 'hierarchical' => 0)) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6061
			foreach ( $cats as $cat ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6062
				$struct = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6063
				$struct['categoryId'] = $cat->term_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6064
				$struct['categoryName'] = $cat->name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6065
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6066
				$categories_struct[] = $struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6067
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6068
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6069
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6070
		return $categories_struct;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6071
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6072
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6073
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6074
	 * Retrieve post categories.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6075
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6076
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6077
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6078
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6079
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6080
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6081
	 *     @type int    $post_ID
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6082
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6083
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6084
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6085
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6086
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6087
	public function mt_getPostCategories( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6088
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6089
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6090
		$post_ID  = (int) $args[0];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6091
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6092
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6093
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6094
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6095
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6096
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6097
		if ( ! get_post( $post_ID ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6098
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6099
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6100
		if ( !current_user_can( 'edit_post', $post_ID ) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6101
			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6102
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6103
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6104
		do_action( 'xmlrpc_call', 'mt.getPostCategories' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6106
		$categories = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6107
		$catids = wp_get_post_categories(intval($post_ID));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6108
		// first listed category will be the primary category
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6109
		$isPrimary = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6110
		foreach ( $catids as $catid ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6111
			$categories[] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6112
				'categoryName' => get_cat_name($catid),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6113
				'categoryId' => (string) $catid,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6114
				'isPrimary' => $isPrimary
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6115
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6116
			$isPrimary = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6117
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6119
		return $categories;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6120
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6122
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6123
	 * Sets categories for a post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6124
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6125
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6126
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6127
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6128
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6129
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6130
	 *     @type int    $post_ID
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6131
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6132
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6133
	 *     @type array  $categories
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6134
	 * }
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6135
	 * @return true|IXR_Error True on success.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6136
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6137
	public function mt_setPostCategories( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6138
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6139
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6140
		$post_ID    = (int) $args[0];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6141
		$username   = $args[1];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6142
		$password   = $args[2];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6143
		$categories = $args[3];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6144
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6145
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6146
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6147
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6148
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6149
		do_action( 'xmlrpc_call', 'mt.setPostCategories' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6150
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6151
		if ( ! get_post( $post_ID ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6152
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6153
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6154
		if ( !current_user_can('edit_post', $post_ID) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6155
			return new IXR_Error(401, __('Sorry, you are not allowed to edit this post.'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6156
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6157
		$catids = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6158
		foreach ( $categories as $cat ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6159
			$catids[] = $cat['categoryId'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6160
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6162
		wp_set_post_categories($post_ID, $catids);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6163
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6164
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6165
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6166
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6167
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6168
	 * Retrieve an array of methods supported by this server.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6169
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6170
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6171
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6172
	 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6173
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6174
	public function mt_supportedMethods() {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6175
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6176
		do_action( 'xmlrpc_call', 'mt.supportedMethods' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6177
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6178
		return array_keys( $this->methods );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6179
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6180
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6181
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6182
	 * Retrieve an empty array because we don't support per-post text filters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6183
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6184
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6185
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6186
	public function mt_supportedTextFilters() {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6187
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6188
		do_action( 'xmlrpc_call', 'mt.supportedTextFilters' );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6189
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6190
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6191
		 * Filters the MoveableType text filters list for XML-RPC.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6192
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6193
		 * @since 2.2.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6194
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6195
		 * @param array $filters An array of text filters.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6196
		 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6197
		return apply_filters( 'xmlrpc_text_filters', array() );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6198
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6199
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6200
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6201
	 * Retrieve trackbacks sent to a given post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6202
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6203
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6204
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6205
	 * @global wpdb $wpdb WordPress database abstraction object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6206
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6207
	 * @param int $post_ID
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6208
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6209
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6210
	public function mt_getTrackbackPings( $post_ID ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6211
		global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6212
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6213
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6214
		do_action( 'xmlrpc_call', 'mt.getTrackbackPings' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6215
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6216
		$actual_post = get_post($post_ID, ARRAY_A);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6217
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6218
		if ( !$actual_post )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6219
			return new IXR_Error(404, __('Sorry, no such post.'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6220
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6221
		$comments = $wpdb->get_results( $wpdb->prepare("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = %d", $post_ID) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6223
		if ( !$comments )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6224
			return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6225
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6226
		$trackback_pings = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6227
		foreach ( $comments as $comment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6228
			if ( 'trackback' == $comment->comment_type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6229
				$content = $comment->comment_content;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6230
				$title = substr($content, 8, (strpos($content, '</strong>') - 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6231
				$trackback_pings[] = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6232
					'pingTitle' => $title,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6233
					'pingURL'   => $comment->comment_author_url,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6234
					'pingIP'    => $comment->comment_author_IP
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6235
				);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6236
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6237
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6238
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6239
		return $trackback_pings;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6240
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6241
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6242
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6243
	 * Sets a post's publish status to 'publish'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6244
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6245
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6246
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6247
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6248
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6249
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6250
	 *     @type int    $post_ID
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6251
	 *     @type string $username
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6252
	 *     @type string $password
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6253
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6254
	 * @return int|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6255
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6256
	public function mt_publishPost( $args ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6257
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6258
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6259
		$post_ID  = (int) $args[0];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6260
		$username = $args[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6261
		$password = $args[2];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6263
		if ( !$user = $this->login($username, $password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6264
			return $this->error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6265
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6266
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6267
		do_action( 'xmlrpc_call', 'mt.publishPost' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6268
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6269
		$postdata = get_post($post_ID, ARRAY_A);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6270
		if ( ! $postdata )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6271
			return new IXR_Error( 404, __( 'Invalid post ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6272
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6273
		if ( !current_user_can('publish_posts') || !current_user_can('edit_post', $post_ID) )
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6274
			return new IXR_Error(401, __('Sorry, you are not allowed to publish this post.'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6275
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6276
		$postdata['post_status'] = 'publish';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6277
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6278
		// retain old cats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6279
		$cats = wp_get_post_categories($post_ID);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6280
		$postdata['post_category'] = $cats;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6281
		$this->escape($postdata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6282
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6283
		return wp_update_post( $postdata );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6284
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6285
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6286
	/* PingBack functions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6287
	 * specs on www.hixie.ch/specs/pingback/pingback
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6288
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6290
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6291
	 * Retrieves a pingback and registers it.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6292
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6293
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6294
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6295
	 * @param array  $args {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6296
	 *     Method arguments. Note: arguments must be ordered as documented.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6297
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6298
	 *     @type string $pagelinkedfrom
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6299
	 *     @type string $pagelinkedto
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6300
	 * }
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6301
	 * @return string|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6302
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6303
	public function pingback_ping( $args ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6304
		global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6305
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6306
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6307
		do_action( 'xmlrpc_call', 'pingback.ping' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6308
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6309
		$this->escape( $args );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6310
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6311
		$pagelinkedfrom = str_replace( '&amp;', '&', $args[0] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6312
		$pagelinkedto = str_replace( '&amp;', '&', $args[1] );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6313
		$pagelinkedto = str_replace( '&', '&amp;', $pagelinkedto );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6314
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6315
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6316
		 * Filters the pingback source URI.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6317
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6318
		 * @since 3.6.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6319
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6320
		 * @param string $pagelinkedfrom URI of the page linked from.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6321
		 * @param string $pagelinkedto   URI of the page linked to.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6322
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6323
		$pagelinkedfrom = apply_filters( 'pingback_ping_source_uri', $pagelinkedfrom, $pagelinkedto );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6324
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6325
		if ( ! $pagelinkedfrom )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6326
			return $this->pingback_error( 0, __( 'A valid URL was not provided.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6328
		// Check if the page linked to is in our site
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6329
		$pos1 = strpos($pagelinkedto, str_replace(array('http://www.','http://','https://www.','https://'), '', get_option('home')));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6330
		if ( !$pos1 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6331
			return $this->pingback_error( 0, __( 'Is there no link to us?' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6332
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6333
		// let's find which post is linked to
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6334
		// FIXME: does url_to_postid() cover all these cases already?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6335
		//        if so, then let's use it and drop the old code.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6336
		$urltest = parse_url($pagelinkedto);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6337
		if ( $post_ID = url_to_postid($pagelinkedto) ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6338
			// $way
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6339
		} elseif ( isset( $urltest['path'] ) && preg_match('#p/[0-9]{1,}#', $urltest['path'], $match) ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6340
			// the path defines the post_ID (archives/p/XXXX)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6341
			$blah = explode('/', $match[0]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6342
			$post_ID = (int) $blah[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6343
		} elseif ( isset( $urltest['query'] ) && preg_match('#p=[0-9]{1,}#', $urltest['query'], $match) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6344
			// the querystring defines the post_ID (?p=XXXX)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6345
			$blah = explode('=', $match[0]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6346
			$post_ID = (int) $blah[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6347
		} elseif ( isset($urltest['fragment']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6348
			// an #anchor is there, it's either...
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6349
			if ( intval($urltest['fragment']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6350
				// ...an integer #XXXX (simplest case)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6351
				$post_ID = (int) $urltest['fragment'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6352
			} elseif ( preg_match('/post-[0-9]+/',$urltest['fragment']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6353
				// ...a post id in the form 'post-###'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6354
				$post_ID = preg_replace('/[^0-9]+/', '', $urltest['fragment']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6355
			} elseif ( is_string($urltest['fragment']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6356
				// ...or a string #title, a little more complicated
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6357
				$title = preg_replace('/[^a-z0-9]/i', '.', $urltest['fragment']);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6358
				$sql = $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title RLIKE %s", $title );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6359
				if (! ($post_ID = $wpdb->get_var($sql)) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6360
					// returning unknown error '0' is better than die()ing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6361
			  		return $this->pingback_error( 0, '' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6362
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6363
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6364
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6365
			// TODO: Attempt to extract a post ID from the given URL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6366
	  		return $this->pingback_error( 33, __('The specified target URL cannot be used as a target. It either doesn&#8217;t exist, or it is not a pingback-enabled resource.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6367
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6368
		$post_ID = (int) $post_ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6369
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6370
		$post = get_post($post_ID);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6372
		if ( !$post ) // Post_ID not found
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6373
	  		return $this->pingback_error( 33, __( 'The specified target URL cannot be used as a target. It either doesn&#8217;t exist, or it is not a pingback-enabled resource.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6375
		if ( $post_ID == url_to_postid($pagelinkedfrom) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6376
			return $this->pingback_error( 0, __( 'The source URL and the target URL cannot both point to the same resource.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6377
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6378
		// Check if pings are on
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6379
		if ( !pings_open($post) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6380
	  		return $this->pingback_error( 33, __( 'The specified target URL cannot be used as a target. It either doesn&#8217;t exist, or it is not a pingback-enabled resource.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6381
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6382
		// Let's check that the remote site didn't already pingback this entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6383
		if ( $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_author_url = %s", $post_ID, $pagelinkedfrom) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6384
			return $this->pingback_error( 48, __( 'The pingback has already been registered.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6386
		// very stupid, but gives time to the 'from' server to publish !
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6387
		sleep(1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6388
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6389
		$remote_ip = preg_replace( '/[^0-9a-fA-F:., ]/', '', $_SERVER['REMOTE_ADDR'] );
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6390
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6391
		/** This filter is documented in wp-includes/class-http.php */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6392
		$user_agent = apply_filters( 'http_headers_useragent', 'WordPress/' . get_bloginfo( 'version' ) . '; ' . get_bloginfo( 'url' ) );
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6393
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6394
		// Let's check the remote site
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6395
		$http_api_args = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6396
			'timeout' => 10,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6397
			'redirection' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6398
			'limit_response_size' => 153600, // 150 KB
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6399
			'user-agent' => "$user_agent; verifying pingback from $remote_ip",
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6400
			'headers' => array(
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6401
				'X-Pingback-Forwarded-For' => $remote_ip,
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6402
			),
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6403
		);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6404
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6405
		$request = wp_safe_remote_get( $pagelinkedfrom, $http_api_args );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6406
		$remote_source = $remote_source_original = wp_remote_retrieve_body( $request );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6407
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6408
		if ( ! $remote_source ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6409
			return $this->pingback_error( 16, __( 'The source URL does not exist.' ) );
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6410
		}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6411
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6412
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6413
		 * Filters the pingback remote source.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6414
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6415
		 * @since 2.5.0
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6416
		 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6417
		 * @param string $remote_source Response source for the page linked from.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6418
		 * @param string $pagelinkedto  URL of the page linked to.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6419
		 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6420
		$remote_source = apply_filters( 'pre_remote_source', $remote_source, $pagelinkedto );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6421
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6422
		// Work around bug in strip_tags():
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6423
		$remote_source = str_replace( '<!DOC', '<DOC', $remote_source );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6424
		$remote_source = preg_replace( '/[\r\n\t ]+/', ' ', $remote_source ); // normalize spaces
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6425
		$remote_source = preg_replace( "/<\/*(h1|h2|h3|h4|h5|h6|p|th|td|li|dt|dd|pre|caption|input|textarea|button|body)[^>]*>/", "\n\n", $remote_source );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6426
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6427
		preg_match( '|<title>([^<]*?)</title>|is', $remote_source, $matchtitle );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6428
		$title = isset( $matchtitle[1] ) ? $matchtitle[1] : '';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6429
		if ( empty( $title ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6430
			return $this->pingback_error( 32, __( 'We cannot find a title on that page.' ) );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6431
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6432
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6433
		$remote_source = strip_tags( $remote_source, '<a>' ); // just keep the tag we need
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6434
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6435
		$p = explode( "\n\n", $remote_source );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6436
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6437
		$preg_target = preg_quote($pagelinkedto, '|');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6438
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6439
		foreach ( $p as $para ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6440
			if ( strpos($para, $pagelinkedto) !== false ) { // it exists, but is it a link?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6441
				preg_match("|<a[^>]+?".$preg_target."[^>]*>([^>]+?)</a>|", $para, $context);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6442
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6443
				// If the URL isn't in a link context, keep looking
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6444
				if ( empty($context) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6445
					continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6446
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6447
				// We're going to use this fake tag to mark the context in a bit
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6448
				// the marker is needed in case the link text appears more than once in the paragraph
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6449
				$excerpt = preg_replace('|\</?wpcontext\>|', '', $para);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6450
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6451
				// prevent really long link text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6452
				if ( strlen($context[1]) > 100 )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6453
					$context[1] = substr($context[1], 0, 100) . '&#8230;';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6454
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6455
				$marker = '<wpcontext>'.$context[1].'</wpcontext>';    // set up our marker
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6456
				$excerpt= str_replace($context[0], $marker, $excerpt); // swap out the link for our marker
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6457
				$excerpt = strip_tags($excerpt, '<wpcontext>');        // strip all tags but our context marker
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6458
				$excerpt = trim($excerpt);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6459
				$preg_marker = preg_quote($marker, '|');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6460
				$excerpt = preg_replace("|.*?\s(.{0,100}$preg_marker.{0,100})\s.*|s", '$1', $excerpt);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6461
				$excerpt = strip_tags($excerpt); // YES, again, to remove the marker wrapper
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6462
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6463
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6464
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6465
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6466
		if ( empty($context) ) // Link to target not found
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6467
			return $this->pingback_error( 17, __( 'The source URL does not contain a link to the target URL, and so cannot be used as a source.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6468
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6469
		$pagelinkedfrom = str_replace('&', '&amp;', $pagelinkedfrom);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6470
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6471
		$context = '[&#8230;] ' . esc_html( $excerpt ) . ' [&#8230;]';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6472
		$pagelinkedfrom = $this->escape( $pagelinkedfrom );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6474
		$comment_post_ID = (int) $post_ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6475
		$comment_author = $title;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6476
		$comment_author_email = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6477
		$this->escape($comment_author);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6478
		$comment_author_url = $pagelinkedfrom;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6479
		$comment_content = $context;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6480
		$this->escape($comment_content);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6481
		$comment_type = 'pingback';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6482
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6483
		$commentdata = compact(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6484
			'comment_post_ID', 'comment_author', 'comment_author_url', 'comment_author_email',
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6485
			'comment_content', 'comment_type', 'remote_source', 'remote_source_original'
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6486
		);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6487
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6488
		$comment_ID = wp_new_comment($commentdata);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6489
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6490
		if ( is_wp_error( $comment_ID ) ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6491
			return $this->pingback_error( 0, $comment_ID->get_error_message() );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6492
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6493
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6494
		/**
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6495
		 * Fires after a post pingback has been sent.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6496
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6497
		 * @since 0.71
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6498
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6499
		 * @param int $comment_ID Comment ID.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6500
		 */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6501
		do_action( 'pingback_post', $comment_ID );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6502
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6503
		/* translators: 1: URL of the page linked from, 2: URL of the page linked to */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6504
		return sprintf( __( 'Pingback from %1$s to %2$s registered. Keep the web talking! :-)' ), $pagelinkedfrom, $pagelinkedto );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6505
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6506
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6507
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6508
	 * Retrieve array of URLs that pingbacked the given URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6509
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6510
	 * Specs on http://www.aquarionics.com/misc/archives/blogite/0198.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6511
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6512
	 * @since 1.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6513
	 *
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6514
	 * @global wpdb $wpdb WordPress database abstraction object.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6515
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6516
	 * @param string $url
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6517
	 * @return array|IXR_Error
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6518
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6519
	public function pingback_extensions_getPingbacks( $url ) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6520
		global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6521
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6522
		/** This action is documented in wp-includes/class-wp-xmlrpc-server.php */
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6523
		do_action( 'xmlrpc_call', 'pingback.extensions.getPingbacks' );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6524
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6525
		$url = $this->escape( $url );
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6526
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6527
		$post_ID = url_to_postid($url);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6528
		if ( !$post_ID ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6529
			// We aren't sure that the resource is available and/or pingback enabled
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6530
	  		return $this->pingback_error( 33, __( 'The specified target URL cannot be used as a target. It either doesn&#8217;t exist, or it is not a pingback-enabled resource.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6531
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6532
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6533
		$actual_post = get_post($post_ID, ARRAY_A);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6534
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6535
		if ( !$actual_post ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6536
			// No such post = resource not found
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6537
	  		return $this->pingback_error( 32, __('The specified target URL does not exist.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6538
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6539
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6540
		$comments = $wpdb->get_results( $wpdb->prepare("SELECT comment_author_url, comment_content, comment_author_IP, comment_type FROM $wpdb->comments WHERE comment_post_ID = %d", $post_ID) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6541
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6542
		if ( !$comments )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6543
			return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6544
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6545
		$pingbacks = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6546
		foreach ( $comments as $comment ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6547
			if ( 'pingback' == $comment->comment_type )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6548
				$pingbacks[] = $comment->comment_author_url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6549
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6551
		return $pingbacks;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6552
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6553
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6554
	/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6555
	 * Sends a pingback error based on the given error code and message.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6556
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6557
	 * @since 3.6.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6558
	 *
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6559
	 * @param int    $code    Error code.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6560
	 * @param string $message Error message.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6561
	 * @return IXR_Error Error object.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6562
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6563
	protected function pingback_error( $code, $message ) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6564
		/**
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  6565
		 * Filters the XML-RPC pingback error return.
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6566
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6567
		 * @since 3.5.1
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6568
		 *
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6569
		 * @param IXR_Error $error An IXR_Error object containing the error code and message.
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  6570
		 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6571
		return apply_filters( 'xmlrpc_pingback_error', new IXR_Error( $code, $message ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6572
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6573
}