| 2383 | /** |
| 2384 | * Prepares post data for return in an XML-RPC object. |
| 2385 | * |
| 2386 | * @access private |
| 2387 | * |
| 2388 | * @param array|object $post_type The unprepared post type data |
| 2389 | * @param array $fields The subset of post fields to return |
| 2390 | * @return array The prepared post type data |
| 2391 | */ |
| 2392 | private function _prepare_post_type( $post_type, $fields ) { |
| 2393 | $post_type = (array) $post_type; |
| 2394 | |
| 2395 | $_post_type = array( |
| 2396 | 'name' => $post_type['name'], |
| 2397 | 'label' => $post_type['label'], |
| 2398 | 'description' => $post_type['description'], |
| 2399 | 'hierarchical' => $post_type['hierarchical'], |
| 2400 | 'public' => $post_type['public'], |
| 2401 | '_builtin' => $post_type['_builtin'], |
| 2402 | 'supports' => get_all_post_type_supports( $post_type['name'] ), |
| 2403 | 'theme' => get_all_post_type_supports( $post_type['name'] ) |
| 2404 | ); |
| 2405 | |
| 2406 | if ( in_array( 'labels', $fields ) ) { |
| 2407 | $_post_type['labels'] = $post_type['labels']; |
| 2408 | } |
| 2409 | |
| 2410 | if ( in_array( 'capabilities', $fields ) ) { |
| 2411 | $_post_type['cap'] = $post_type['cap']; |
| 2412 | $_post_type['capability_type'] = $post_type['capability_type']; |
| 2413 | $_post_type['map_meta_cap'] = $post_type['map_meta_cap']; |
| 2414 | } |
| 2415 | |
| 2416 | if ( in_array( 'admin', $fields ) ) { |
| 2417 | $_post_type['publicly_queryable'] = $post_type['publicly_queryable']; |
| 2418 | $_post_type['exclude_from_search'] = $post_type['exclude_from_search']; |
| 2419 | $_post_type['_edit_link'] = $post_type['_edit_link']; |
| 2420 | $_post_type['rewrite'] = $post_type['rewrite']; |
| 2421 | $_post_type['has_archive'] = $post_type['has_archive']; |
| 2422 | $_post_type['query_var'] = $post_type['query_var']; |
| 2423 | } |
| 2424 | |
| 2425 | if ( in_array( 'menu', $fields ) ) { |
| 2426 | $_post_type['show_ui'] = $post_type['show_ui']; |
| 2427 | $_post_type['menu_position'] = $post_type['menu_position']; |
| 2428 | $_post_type['menu_icon'] = $post_type['menu_icon']; |
| 2429 | $_post_type['show_in_nav_menus'] = $post_type['show_in_nav_menus']; |
| 2430 | $_post_type['show_in_menu'] = $post_type['show_in_menu']; |
| 2431 | $_post_type['show_in_admin_bar'] = $post_type['show_in_admin_bar']; |
| 2432 | } |
| 2433 | |
| 2434 | if ( in_array( 'taxonomies', $fields ) ) { |
| 2435 | $_post_type['taxonomies'] = get_object_taxonomies( $_post_type['name'] ); |
| 2436 | } |
| 2437 | |
| 2438 | return apply_filters( 'xmlrpc__prepare_post_type', $_post_type, $post_type ); |
| 2439 | } |
| 2440 | |
| 2441 | /** |
| 2442 | * Retrieves a post type |
| 2443 | * |
| 2444 | * @uses get_post_type_object() |
| 2445 | * @param array $args Method parameters. Contains: |
| 2446 | * - int $blog_id |
| 2447 | * - string $username |
| 2448 | * - string $password |
| 2449 | * - string $post_type_name |
| 2450 | * - array $fields |
| 2451 | * @return array contains: |
| 2452 | * - 'labels' |
| 2453 | * - 'description' |
| 2454 | * - 'capability_type' |
| 2455 | * - 'cap' |
| 2456 | * - 'map_meta_cap' |
| 2457 | * - 'hierarchical' |
| 2458 | * - 'menu_position' |
| 2459 | * - 'taxonomies' |
| 2460 | * - 'supports' |
| 2461 | */ |
| 2462 | function wp_getPostType( $args ) { |
| 2463 | $this->escape( $args ); |
| 2464 | |
| 2465 | $blog_id = (int) $args[0]; |
| 2466 | $username = $args[1]; |
| 2467 | $password = $args[2]; |
| 2468 | $post_type_name = $args[3]; |
| 2469 | |
| 2470 | if ( isset( $args[4] ) ) |
| 2471 | $fields = $args[4]; |
| 2472 | else |
| 2473 | $fields = apply_filters( 'xmlrpc_default_posttype_fields', array( 'labels', 'capabilities', 'taxonomies' ), 'wp.getPostType' ); |
| 2474 | |
| 2475 | if ( !$user = $this->login( $username, $password ) ) |
| 2476 | return $this->error; |
| 2477 | |
| 2478 | do_action( 'xmlrpc_call', 'wp.getPostType' ); |
| 2479 | |
| 2480 | if( ! post_type_exists( $post_type_name ) ) |
| 2481 | return new IXR_Error( 403, __( 'Invalid post type.' ) ); |
| 2482 | |
| 2483 | $post_type = get_post_type_object( $post_type_name ); |
| 2484 | |
| 2485 | if( ! current_user_can( $post_type->cap->edit_posts ) ) |
| 2486 | return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post type.' ) ); |
| 2487 | |
| 2488 | return $this->_prepare_post_type( $post_type, $fields ); |
| 2489 | } |
| 2490 | |
| 2491 | /** |
| 2492 | * Retrieves a post types |
| 2493 | * |
| 2494 | * @access private |
| 2495 | * |
| 2496 | * @uses get_post_types() |
| 2497 | * @param array $args Method parameters. Contains: |
| 2498 | * - int $blog_id |
| 2499 | * - string $username |
| 2500 | * - string $password |
| 2501 | * - array $filter |
| 2502 | * - array $fields |
| 2503 | * @return array |
| 2504 | */ |
| 2505 | function wp_getPostTypes( $args ) { |
| 2506 | $this->escape( $args ); |
| 2507 | |
| 2508 | $blog_id = (int) $args[0]; |
| 2509 | $username = $args[1]; |
| 2510 | $password = $args[2]; |
| 2511 | $filter = isset( $args[3] ) ? $args[3] : array( 'public' => true ); |
| 2512 | |
| 2513 | if ( isset( $args[4] ) ) |
| 2514 | $fields = $args[4]; |
| 2515 | else |
| 2516 | $fields = apply_filters( 'xmlrpc_default_posttype_fields', array( 'labels', 'capabilities', 'taxonomies' ), 'wp.getPostTypes' ); |
| 2517 | |
| 2518 | if ( ! $user = $this->login( $username, $password ) ) |
| 2519 | return $this->error; |
| 2520 | |
| 2521 | do_action( 'xmlrpc_call', 'wp.getPostTypes' ); |
| 2522 | |
| 2523 | $post_types = get_post_types( $filter, 'objects' ); |
| 2524 | |
| 2525 | $struct = array(); |
| 2526 | |
| 2527 | foreach( $post_types as $post_type ) { |
| 2528 | if( ! current_user_can( $post_type->cap->edit_posts ) ) |
| 2529 | continue; |
| 2530 | |
| 2531 | $struct[$post_type->name] = $this->_prepare_post_type( $post_type, $fields ); |
| 2532 | } |
| 2533 | |
| 2534 | return $struct; |
| 2535 | } |
| 2536 | |