View difference between Paste ID: pSYxsB5B and
SHOW: | | - or go back to the newest paste.
1-
1+
Tried installing this file as plugin and it give me XML-server parse errors, so had to de-activate.
2
3
What is wrong with my code?
4
5
<?php
6
   /***************************************************************************/
7
   /* Plugin Name: post_decode.php                                            */
8
   /*  Plugin URI:  http://nyledavis.com/code/wordpress/plugin-post_decode/   */
9
   /* Description: Code to allow the extension of XML-RPC processing to work  */
10
   /*              with the content/description string that contains HTML     */
11
   /*              tags which cause XML parser errors and thus must be        */
12
   /*              encoded with either "htmlentities" or "htmlspecialchars"   */
13
   /*              and thus need decoding, so the HTML is in native format or */
14
   /*              code and thus the HTML formatting is maintained.           */
15
   /*     Version: 0.1.0                                                      */
16
   /*      Author: Nyle E. Davis                                              */
17
   /* Create Date: 11/06/2010                                                 */
18
   /***************************************************************************/
19
20
   function post_decode ($text, $type, $charset = 'Windows-1252') {
21
      if ($type=='entities') {
22
	 return html_entity_decode ($text, ENT_COMPAT, $charset, false);
23
      }
24
      if ($type=='chars') {
25
      	 return htmlspecialchars_decode ($text, ENT_COMPAT, $charset, false);
26
      }
27
   }  // end function
28
29
   add_filter( 'xmlrpc_methods', 'post_decode' );
30
31
	function mw_newPost($args) {
32
		$this->escape($args);
33
34
		$blog_ID     = (int) $args[0]; // we will support this in the near future
35
		$username  = $args[1];
36
		$password   = $args[2];
37
		$content_struct = $args[3];
38
		$publish     = $args[4];
39
40
		if ( !$user = $this->login($username, $password) )
41
			return $this->error;
42
43
		do_action('xmlrpc_call', 'metaWeblog.newPost');
44
45
		$cap = ( $publish ) ? 'publish_posts' : 'edit_posts';
46
		$error_message = __( 'Sorry, you are not allowed to publish posts on this site.' );
47
		$post_type = 'post';
48
		$page_template = '';
49
		if ( !empty( $content_struct['post_type'] ) ) {
50
			if ( $content_struct['post_type'] == 'page' ) {
51
				$cap = ( $publish ) ? 'publish_pages' : 'edit_pages';
52
				$error_message = __( 'Sorry, you are not allowed to publish pages on this site.' );
53
				$post_type = 'page';
54
				if ( !empty( $content_struct['wp_page_template'] ) )
55
					$page_template = $content_struct['wp_page_template'];
56
			} elseif ( $content_struct['post_type'] == 'post' ) {
57
				// This is the default, no changes needed
58
			} else {
59
				// No other post_type values are allowed here
60
				return new IXR_Error( 401, __( 'Invalid post type.' ) );
61
			}
62
		}
63
64
		if ( !current_user_can( $cap ) )
65
			return new IXR_Error( 401, $error_message );
66
67
		// Let WordPress generate the post_name (slug) unless
68
		// one has been provided.
69
		$post_name = "";
70
		if ( isset($content_struct["wp_slug"]) )
71
			$post_name = $content_struct["wp_slug"];
72
73
		// Only use a password if one was given.
74
		if ( isset($content_struct["wp_password"]) )
75
			$post_password = $content_struct["wp_password"];
76
77
		// Only set a post parent if one was provided.
78
		if ( isset($content_struct["wp_page_parent_id"]) )
79
			$post_parent = $content_struct["wp_page_parent_id"];
80
81
		// Only set the menu_order if it was provided.
82
		if ( isset($content_struct["wp_page_order"]) )
83
			$menu_order = $content_struct["wp_page_order"];
84
85
		$post_author = $user->ID;
86
87
		// If an author id was provided then use it instead.
88
		if ( isset($content_struct["wp_author_id"]) && ($user->ID != $content_struct["wp_author_id"]) ) {
89
			switch ( $post_type ) {
90
				case "post":
91
					if ( !current_user_can("edit_others_posts") )
92
						return(new IXR_Error(401, __("You are not allowed to post as this user")));
93
					break;
94
				case "page":
95
					if ( !current_user_can("edit_others_pages") )
96
						return(new IXR_Error(401, __("You are not allowed to create pages as this user")));
97
					break;
98
				default:
99
					return(new IXR_Error(401, __("Invalid post type.")));
100
					break;
101
			}
102
			$post_author = $content_struct["wp_author_id"];
103
		}
104
105
		$post_title    = $content_struct['title'];
106
                // Following 5 lines added/modified  by Nyle Davis on 11/06/10
107
                // to decode encoded HTML content
108
		$post_decode   = $content_struct['post_decode'];
109
		$post_dec_type = $content_struct['post_dec_type'];
110
		$post_dec_char = $content_struct['post_dec_char'];
111
		$post_desc     = $content_struct['description'];
112
		$post_content  = post_decode($post_desc,$post_dec_type,$post_dec_char);
113
114
		$post_status = $publish ? 'publish' : 'draft';
115
116
		if ( isset( $content_struct["{$post_type}_status"] ) ) {
117
			switch ( $content_struct["{$post_type}_status"] ) {
118
				case 'draft':
119
				case 'private':
120
				case 'publish':
121
					$post_status = $content_struct["{$post_type}_status"];
122
					break;
123
				case 'pending':
124
					// Pending is only valid for posts, not pages.
125
					if ( $post_type === 'post' )
126
						$post_status = $content_struct["{$post_type}_status"];
127
					break;
128
				default:
129
					$post_status = $publish ? 'publish' : 'draft';
130
					break;
131
			}
132
		}
133
134
		$post_excerpt = $content_struct['mt_excerpt'];
135
		$post_more = $content_struct['mt_text_more'];
136
137
		$tags_input = $content_struct['mt_keywords'];
138
139
		if ( isset($content_struct["mt_allow_comments"]) ) {
140
			if ( !is_numeric($content_struct["mt_allow_comments"]) ) {
141
				switch ( $content_struct["mt_allow_comments"] ) {
142
					case "closed":
143
						$comment_status = "closed";
144
						break;
145
					case "open":
146
						$comment_status = "open";
147
						break;
148
					default:
149
						$comment_status = get_option("default_comment_status");
150
						break;
151
				}
152
			} else {
153
				switch ( (int) $content_struct["mt_allow_comments"] ) {
154
					case 0:
155
					case 2:
156
						$comment_status = "closed";
157
						break;
158
					case 1:
159
						$comment_status = "open";
160
						break;
161
					default:
162
						$comment_status = get_option("default_comment_status");
163
						break;
164
				}
165
			}
166
		} else {
167
			$comment_status = get_option("default_comment_status");
168
		}
169
170
		if ( isset($content_struct["mt_allow_pings"]) ) {
171
			if ( !is_numeric($content_struct["mt_allow_pings"]) ) {
172
				switch ( $content_struct['mt_allow_pings'] ) {
173
					case "closed":
174
						$ping_status = "closed";
175
						break;
176
					case "open":
177
						$ping_status = "open";
178
						break;
179
					default:
180
						$ping_status = get_option("default_ping_status");
181
						break;
182
				}
183
			} else {
184
				switch ( (int) $content_struct["mt_allow_pings"] ) {
185
					case 0:
186
						$ping_status = "closed";
187
						break;
188
					case 1:
189
						$ping_status = "open";
190
						break;
191
					default:
192
						$ping_status = get_option("default_ping_status");
193
						break;
194
				}
195
			}
196
		} else {
197
			$ping_status = get_option("default_ping_status");
198
		}
199
200
		if ( $post_more )
201
			$post_content = $post_content . "<!--more-->" . $post_more;
202
203
		$to_ping = $content_struct['mt_tb_ping_urls'];
204
		if ( is_array($to_ping) )
205
			$to_ping = implode(' ', $to_ping);
206
207
		// Do some timestamp voodoo
208
		if ( !empty( $content_struct['date_created_gmt'] ) )
209
			$dateCreated = str_replace( 'Z', '', $content_struct['date_created_gmt']->getIso() ) . 'Z'; // We know this is supposed to be GMT, so we're going to slap that Z on there by force
210
		elseif ( !empty( $content_struct['dateCreated']) )
211
			$dateCreated = $content_struct['dateCreated']->getIso();
212
213
		if ( !empty( $dateCreated ) ) {
214
			$post_date = get_date_from_gmt(iso8601_to_datetime($dateCreated));
215
			$post_date_gmt = iso8601_to_datetime($dateCreated, GMT);
216
		} else {
217
			$post_date = current_time('mysql');
218
			$post_date_gmt = current_time('mysql', 1);
219
		}
220
221
		$catnames = $content_struct['categories'];
222
		logIO('O', 'Post cats: ' . var_export($catnames,true));
223
		$post_category = array();
224
225
		if ( is_array($catnames) ) {
226
			foreach ($catnames as $cat) {
227
				$post_category[] = get_cat_ID($cat);
228
			}
229
		}
230
231
		// We've got all the data -- post it:
232
		$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');
233
234
		$post_ID = wp_insert_post($postdata, true);
235
		if ( is_wp_error( $post_ID ) )
236
			return new IXR_Error(500, $post_ID->get_error_message());
237
238
		if ( !$post_ID )
239
			return new IXR_Error(500, __('Sorry, your entry could not be posted. Something wrong happened.'));
240
241
		// Only posts can be sticky
242
		if ( $post_type == 'post' && isset( $content_struct['sticky'] ) ) {
243
			if ( $content_struct['sticky'] == true )
244
				stick_post( $post_ID );
245
			elseif ( $content_struct['sticky'] == false )
246
				unstick_post( $post_ID );
247
		}
248
249
		if ( isset($content_struct['custom_fields']) )
250
			$this->set_custom_fields($post_ID, $content_struct['custom_fields']);
251
252
		// Handle enclosures
253
		$this->add_enclosure_if_new($post_ID, $content_struct['enclosure']);
254
255
		$this->attach_uploads( $post_ID, $post_content );
256
257
		logIO('O', "Posted ! ID: $post_ID");
258
259
		return strval($post_ID);
260
	}
261
   add_filter( 'xmlrpc_methods', 'mw_newPost' );
262
263
?>