WordPress.org

Plugin Directory

Changeset 510787


Ignore:
Timestamp:
02/26/12 18:55:03 (2 years ago)
Author:
maxcutler
Message:

Version 0.7.5 release.

Location:
xml-rpc-modernization/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • xml-rpc-modernization/trunk/class-wp-xmlrpc-server-ext.php

    r502038 r510787  
    5454     * Prepares user data for return in an XML-RPC object. 
    5555     * 
     56     * @access protected 
     57     * 
    5658     * @param WP_User $user The unprepared user object 
    5759     * @param array $fields The subset of user fields to return 
    5860     * @return array The prepared user data 
    5961     */ 
    60     function prepare_user( $user, $fields ) { 
     62    protected function _prepare_user( $user, $fields ) { 
    6163        $contact_methods = _wp_get_user_contactmethods(); 
    6264 
     
    7274            'first_name'        => $user->user_firstname, 
    7375            'last_name'         => $user->user_lastname, 
    74             'registered'        => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $user->user_registered, false ) ), 
     76            'registered'        => $this->_convert_date( $user->user_registered ), 
    7577            'bio'               => $user->user_description, 
    7678            'email'             => $user->user_email, 
     
    9698        } 
    9799 
    98         return apply_filters( 'xmlrpc_prepare_user', $_user, $user, $fields ); 
     100        return apply_filters( 'xmlrpc__prepare_user', $_user, $user, $fields ); 
     101    } 
     102 
     103    /** 
     104     * Convert a WordPress date string to an IXR_Date object. 
     105     * 
     106     * @access protected 
     107     * 
     108     * @param $date 
     109     * @return IXR_Date 
     110     */ 
     111    protected function _convert_date( $date ) { 
     112        if ( $date === '0000-00-00 00:00:00' ) { 
     113            return new IXR_Date( '00000000T00:00:00Z' ); 
     114        } 
     115        return new IXR_Date( mysql2date( 'Ymd\TH:i:s', $date, false ) ); 
    99116    } 
    100117 
     
    102119     * Prepares post data for return in an XML-RPC object. 
    103120     * 
    104      * @access private 
     121     * @access protected 
    105122     * 
    106123     * @param array $post The unprepared post data 
     
    108125     * @return array The prepared post data 
    109126     */ 
    110     function _prepare_post( $post, $fields ) { 
     127    protected function _prepare_post( $post, $fields ) { 
    111128        // holds the data for this post. built up based on $fields 
    112         $_post = array( 'post_id' => $post['ID'] ); 
     129        $_post = array( 'post_id' => strval( $post['ID'] ) ); 
    113130 
    114131        // prepare common post fields 
    115132        $post_fields = array( 
    116133            'post_title'        => $post['post_title'], 
    117             'post_date'         => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_date'], false ) ), 
    118             'post_date_gmt'     => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_date_gmt'], false ) ), 
    119             'post_modified'     => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_modified'], false ) ), 
    120             'post_modified_gmt' => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_modified_gmt'], false ) ), 
     134            'post_date'         => $this->_convert_date( $post['post_date'] ), 
     135            'post_date_gmt'     => $this->_convert_date( $post['post_date_gmt'] ), 
     136            'post_modified'     => $this->_convert_date( $post['post_modified'] ), 
     137            'post_modified_gmt' => $this->_convert_date( $post['post_modified_gmt'] ), 
    121138            'post_status'       => $post['post_status'], 
    122139            'post_type'         => $post['post_type'], 
     
    130147            'ping_status'       => $post['ping_status'], 
    131148            'sticky'            => ( $post['post_type'] === 'post' && is_sticky( $post['ID'] ) ), 
     149            'featured_image'    => get_post_meta( $post['ID'], '_thumbnail_id', true ), 
    132150        ); 
    133151 
     
    156174            $_post['terms'] = array(); 
    157175            foreach ( $terms as $term ) { 
    158                 $_post['terms'][] = $this->prepare_term( $term ); 
     176                $_post['terms'][] = $this->_prepare_term( $term ); 
    159177            } 
    160178        } 
     
    205223     * Prepares taxonomy data for return in an XML-RPC object. 
    206224     * 
     225     * @access protected 
     226    .* 
    207227     * @param array|object $taxonomy The unprepared taxonomy data 
    208228     * @return array The prepared taxonomy data 
    209229     */ 
    210     function prepare_taxonomy( $taxonomy ) { 
     230    protected function _prepare_taxonomy( $taxonomy ) { 
    211231        $_taxonomy = (array) $taxonomy; 
    212232 
    213233        unset( $_taxonomy['update_count_callback'] ); 
    214234 
    215         return apply_filters( 'xmlrpc_prepare_taxonomy', $_taxonomy, $taxonomy ); 
     235        return apply_filters( 'xmlrpc__prepare_taxonomy', $_taxonomy, $taxonomy ); 
    216236    } 
    217237 
     
    219239     * Prepares term data for return in an XML-RPC object. 
    220240     * 
    221      * @param array $term The unprepared term data 
     241     * @access protected 
     242    .* 
     243     * @param array|object $term The unprepared term data 
    222244     * @return array The prepared term data 
    223245     */ 
    224     function prepare_term( $term ) { 
    225         $_term = (array) $term; 
    226  
    227         return apply_filters( 'xmlrpc_prepare_term', $_term, $term ); 
     246    protected function _prepare_term( $term ) { 
     247        $_term = $term; 
     248        if ( ! is_array( $_term) ) 
     249            $_term = get_object_vars( $_term ); 
     250 
     251        return apply_filters( 'xmlrpc__prepare_term', $_term, $term ); 
    228252    } 
    229253 
    230254    /** 
    231255     * Prepares post type data for return in an XML-RPC object. 
     256     * 
     257     * @access protected 
    232258     * 
    233259     * @param array|object $post_type The unprepared post type data 
    234260     * @return array The prepared post type data 
    235261     */ 
    236     function prepare_post_type( $post_type ) { 
     262    protected function _prepare_post_type( $post_type ) { 
    237263        $_post_type = (array) $post_type; 
    238264 
    239265        $_post_type['taxonomies'] = get_object_taxonomies( $_post_type['name'] ); 
    240266 
    241         return apply_filters( 'xmlrpc_prepare_post_type', $_post_type, $post_type ); 
     267        return apply_filters( 'xmlrpc__prepare_post_type', $_post_type, $post_type ); 
    242268    } 
    243269 
     
    557583            return new IXR_Error( 401, __( 'Sorry, you cannot edit users.' ) ); 
    558584 
    559         $user = $this->prepare_user( $user_data, $fields ); 
     585        $user = $this->_prepare_user( $user_data, $fields ); 
    560586 
    561587        return $user; 
     
    622648        $_users = array(); 
    623649        foreach ( $users as $user_data ) { 
    624             $_users[] = $this->prepare_user( get_userdata( $user_data->ID ), $fields ); 
     650            $_users[] = $this->_prepare_user( get_userdata( $user_data->ID ), $fields ); 
    625651        } 
    626652 
     
    657683 
    658684        $user_data = get_userdata( $user->ID ); 
    659         $user = $this->prepare_user( $user_data, $fields ); 
     685        $user = $this->_prepare_user( $user_data, $fields ); 
    660686 
    661687        return $user; 
     
    684710     *      - ping_status - can be 'open' | 'closed' 
    685711     *      - sticky 
     712     *      - featured_image - ID of a media item to use as the featured image 
    686713     *      - custom_fields - array, with each element containing 'key' and 'value' 
    687714     *      - terms - array, with taxonomy names as keys and arrays of term IDs as values 
     
    706733        unset( $content_struct['ID'] ); 
    707734 
    708         return $this->_wp_insertPost( $user, $content_struct ); 
     735        return $this->_insert_post( $user, $content_struct ); 
    709736    } 
    710737 
     
    719746     * Helper method for wp_newPost and wp_editPost, containing shared logic. 
    720747     */ 
    721     function _wp_insertPost( $user, $content_struct ) { 
     748    function _insert_post( $user, $content_struct ) { 
    722749        $defaults = array( 'post_status' => 'draft', 'post_type' => 'post', 'post_author' => 0, 
    723750            'post_password' => '', 'post_excerpt' => '', 'post_content' => '', 'post_title' => '', 'sticky' => 0 ); 
     
    726753 
    727754        $post_type = get_post_type_object( $post_data['post_type'] ); 
    728         if( ! ( (bool) $post_type ) ) 
     755        if ( ! ( (bool) $post_type ) ) 
    729756            return new IXR_Error( 403, __( 'Invalid post type' ) ); 
    730757 
    731         if( ! current_user_can( $post_type->cap->edit_posts ) ) 
    732             return new IXR_Error( 401, __( 'Sorry, you are not allowed to post on this site.' ) ); 
     758        $update = false; 
     759        if ( ! empty( $post_data[ 'ID' ] ) ) 
     760            $update = true; 
     761 
     762        if ( $update ) { 
     763            if ( ! current_user_can( $post_type->cap->edit_post, $post_data[ 'ID' ] ) ) 
     764                return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post.' ) ); 
     765        } else { 
     766            if ( ! current_user_can( $post_type->cap->edit_posts ) ) 
     767                return new IXR_Error( 401, __( 'Sorry, you are not allowed to post on this site.' ) ); 
     768        } 
    733769 
    734770        switch ( $post_data['post_status'] ) { 
     
    737773                break; 
    738774            case 'private': 
    739                 if( ! current_user_can( $post_type->cap->publish_posts ) ) 
     775                if ( ! current_user_can( $post_type->cap->publish_posts ) ) 
    740776                    return new IXR_Error( 401, __( 'Sorry, you are not allowed to create private posts in this post type' )); 
    741777                break; 
    742778            case 'publish': 
    743779            case 'future': 
    744                 if( ! current_user_can( $post_type->cap->publish_posts ) ) 
     780                if ( ! current_user_can( $post_type->cap->publish_posts ) ) 
    745781                    return new IXR_Error( 401, __( 'Sorry, you are not allowed to publish posts in this post type' )); 
    746782                break; 
     
    753789            return new IXR_Error( 401, __( 'Sorry, you are not allowed to create password protected posts in this post type' ) ); 
    754790 
    755  
    756791        $post_data['post_author'] = absint( $post_data['post_author'] ); 
    757         if( ! empty( $post_data['post_author'] ) && $post_data['post_author'] != $user->ID ) { 
    758             if( ! current_user_can( $post_type->cap->edit_others_posts ) ) 
     792        if ( ! empty( $post_data['post_author'] ) && $post_data['post_author'] != $user->ID ) { 
     793            if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) 
    759794                return new IXR_Error( 401, __( 'You are not allowed to create posts as this user.' ) ); 
    760795 
    761796            $author = get_userdata( $post_data['post_author'] ); 
    762797 
    763             if( ! $author ) 
     798            if ( ! $author ) 
    764799                return new IXR_Error( 404, __( 'Invalid author ID.' ) ); 
    765         } 
    766         else { 
     800        } else { 
    767801            $post_data['post_author'] = $user->ID; 
    768802        } 
    769803 
    770         if( isset( $post_data['comment_status'] ) ) 
    771             if( ! post_type_supports( $post_data['post_type'], 'comments' ) || ( $post_data['comment_status'] != 'open' && $post_data['comment_status'] != 'closed' ) ) 
     804        if ( isset( $post_data['comment_status'] ) ) { 
     805            if ( ! post_type_supports( $post_data['post_type'], 'comments' ) || ( $post_data['comment_status'] != 'open' && $post_data['comment_status'] != 'closed' ) ) { 
    772806                unset( $post_data['comment_status'] ); 
    773  
    774         if( isset( $post_data['ping_status'] ) ) 
    775             if( ! post_type_supports( $post_data['post_type'], 'trackbacks' ) || ( $post_data['ping_status'] != 'open' && $post_data['ping_status'] != 'closed' ) ) 
     807            } 
     808        } 
     809 
     810        if ( isset( $post_data['ping_status'] ) ) { 
     811            if ( ! post_type_supports( $post_data['post_type'], 'trackbacks' ) || ( $post_data['ping_status'] != 'open' && $post_data['ping_status'] != 'closed' ) ) { 
    776812                unset( $post_data['ping_status'] ); 
     813            } 
     814        } 
    777815 
    778816        // Do some timestamp voodoo 
     
    796834        $sticky = $post_data['sticky'] ? true : false; 
    797835 
    798         if( $post_data['post_type'] == 'post' && $sticky == true ) { 
    799             if( ! current_user_can( $post_type->cap->edit_others_posts ) ) 
     836        if ( $post_data['post_type'] == 'post' && $sticky == true ) { 
     837            if ( ! current_user_can( $post_type->cap->edit_others_posts ) ) 
    800838                return new IXR_Error( 401, __( 'Sorry, you are not allowed to stick this post.' ) ); 
    801839 
    802             if( $post_data['post_status'] != 'publish' ) 
     840            if ( $post_data['post_status'] != 'publish' ) 
    803841                return new IXR_Error( 401, __( 'Only published posts can be made sticky.' ) ); 
    804842 
     
    806844        } 
    807845 
    808         if( isset ( $post_data['custom_fields'] ) && post_type_supports( $post_data['post_type'], 'custom-fields' ) ) { 
     846        if ( isset ( $post_data['featured_image'] ) ) { 
     847            // empty value deletes, non-empty value adds/updates 
     848            if ( empty( $post_data['featured_image'] ) ) { 
     849                delete_post_meta( $post_ID, '_thumbnail_id' ); 
     850            } 
     851            else { 
     852                $image = get_post( intval( $post_data['featured_image'] ), ARRAY_A ); 
     853                if ( empty($image['ID'] ) ) 
     854                    return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); 
     855                update_post_meta( $post_ID, '_thumbnail_id', $image['ID'] ); 
     856            } 
     857            unset( $content_struct['featured_image'] ); 
     858        } 
     859 
     860        if ( isset ( $post_data['custom_fields'] ) && post_type_supports( $post_data['post_type'], 'custom-fields' ) ) { 
    809861            $this->set_custom_fields( $post_ID, $post_data['custom_fields'] ); 
    810862        } 
    811863 
    812         if( isset( $post_data['terms'] ) || isset( $post_data['terms_names'] ) ) { 
     864        if ( isset( $post_data['terms'] ) || isset( $post_data['terms_names'] ) ) { 
    813865            $post_type_taxonomies = get_object_taxonomies( $post_data['post_type'], 'objects' ); 
    814866 
     
    817869 
    818870            // first validate the terms specified by ID 
    819             if( isset( $post_data['terms'] ) && is_array( $post_data['terms'] ) ) { 
     871            if ( isset( $post_data['terms'] ) && is_array( $post_data['terms'] ) ) { 
    820872                $taxonomies = array_keys( $post_data['terms'] ); 
    821873 
     
    825877                        return new IXR_Error( 401, __( 'Sorry, one of the given taxonomies is not supported by the post type.' ) ); 
    826878 
    827                     if( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) ) 
    828                         return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign a term to one of the given taxonomies' ) ); 
     879                    if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) ) 
     880                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign a term to one of the given taxonomies.' ) ); 
    829881 
    830882                    $term_ids = $post_data['terms'][$taxonomy]; 
     
    848900                        return new IXR_Error( 401, __( 'Sorry, one of the given taxonomies is not supported by the post type.' ) ); 
    849901 
    850                     if( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) ) 
     902                    if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->assign_terms ) ) 
    851903                        return new IXR_Error( 401, __( 'Sorry, you are not allowed to assign a term to one of the given taxonomies.' ) ); 
    852904 
    853905                    // for hierarchical taxonomies, we can't assign a term when multiple terms in the hierarchy share the same name 
    854906                    $ambiguous_terms = array(); 
    855                     if( is_taxonomy_hierarchical( $taxonomy ) ) { 
     907                    if ( is_taxonomy_hierarchical( $taxonomy ) ) { 
    856908                        $tax_term_names = get_terms( $taxonomy, array( 'fields' => 'names', 'hide_empty' => false ) ); 
    857909 
     
    874926                        if ( ! $term ) { 
    875927                            // term doesn't exist, so check that the user is allowed to create new terms 
    876                             if( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->edit_terms ) ) 
     928                            if ( ! current_user_can( $post_type_taxonomies[$taxonomy]->cap->edit_terms ) ) 
    877929                                return new IXR_Error( 401, __( 'Sorry, you are not allowed to add a term to one of the given taxonomies.' ) ); 
    878930 
     
    883935 
    884936                            $terms[$taxonomy][] = (int) $term_info['term_id']; 
    885                         } 
    886                         else { 
     937                        } else { 
    887938                            $terms[$taxonomy][] = (int) $term->term_id; 
    888939                        } 
     
    894945            unset( $post_data['terms'] ); 
    895946            unset( $post_data['terms_names'] ); 
    896         } 
    897         else { 
     947        } else { 
    898948            // do not allow direct submission of 'tax_input', clients must use 'terms' and/or 'terms_names' 
    899949            unset( $post_data['tax_input'] ); 
    900950        } 
    901951 
    902         if( isset( $post_data['post_format'] ) ) { 
     952        if ( isset( $post_data['post_format'] ) ) { 
    903953            $format = set_post_format( $post_ID, $post_data['post_format'] ); 
    904954 
     
    927977    } 
    928978 
    929     /* 
     979    /** 
    930980     * Edit a post for any registered post type. 
    931981     * 
     
    9561006        do_action( 'xmlrpc_call', 'wp.editPost' ); 
    9571007 
    958         // User Capabilities are checked in _wp_insertPost. 
     1008        // User Capabilities are checked in _insert_post. 
    9591009 
    9601010        $post = get_post( $post_id, ARRAY_A ); 
     
    9641014 
    9651015        // convert the date field back to IXR form 
    966         $post['post_date'] = new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_date'], false ) ); 
     1016        $post['post_date'] = $this->_convert_date( $post['post_date'] ); 
    9671017 
    9681018        // ignore the existing GMT date if it is empty or a non-GMT date was supplied in $content_struct, 
    969         // since _wp_insertPost will ignore the non-GMT date if the GMT date is set 
     1019        // since _insert_post will ignore the non-GMT date if the GMT date is set 
    9701020        if ( $post['post_date_gmt'] == '0000-00-00 00:00:00' || isset( $content_struct['post_date'] ) ) 
    9711021            unset( $post['post_date_gmt'] ); 
    9721022        else 
    973             $post['post_date_gmt'] = new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_date_gmt'], false ) ); 
     1023            $post['post_date_gmt'] = $this->_convert_date( $post['post_date_gmt'] ); 
    9741024 
    9751025        $this->escape( $post ); 
    9761026        $merged_content_struct = array_merge( $post, $content_struct ); 
    9771027 
    978         $retval = $this->_wp_insertPost( $user, $merged_content_struct ); 
     1028        $retval = $this->_insert_post( $user, $merged_content_struct ); 
    9791029        if ( $retval instanceof IXR_Error ) 
    9801030            return $retval; 
     
    10121062 
    10131063        $post_type = get_post_type_object( $post['post_type'] ); 
    1014         if( ! current_user_can( $post_type->cap->delete_post, $post_id ) ) 
     1064        if ( ! current_user_can( $post_type->cap->delete_post, $post_id ) ) 
    10151065            return new IXR_Error( 401, __( 'Sorry, you are not allowed to delete this post.' ) ); 
    10161066 
     
    11641214        } 
    11651215 
    1166         do_action( 'xmlrpc_call', 'wp.getPosts' ); 
    1167  
    11681216        $posts_list = wp_get_recent_posts( $query ); 
    11691217 
     
    13591407            return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit this post type.' ) ); 
    13601408 
    1361         return $this->prepare_post_type( $post_type ); 
     1409        return $this->_prepare_post_type( $post_type ); 
    13621410    } 
    13631411 
     
    13921440                continue; 
    13931441 
    1394             $struct[] = $this->prepare_post_type( $post_type ); 
     1442            $struct[] = $this->_prepare_post_type( $post_type ); 
    13951443        } 
    13961444 
     
    14141462     *      - 'description' 
    14151463     *      - 'slug' 
    1416      * @return int term_id 
     1464     * @return string term_id 
    14171465     */ 
    14181466    function wp_newTerm( $args ) { 
     
    14571505 
    14581506            if ( ! $parent_term ) 
    1459                 return new IXR_Error( 500, __( 'Parent term does not exist.' ) ); 
     1507                return new IXR_Error( 403, __( 'Parent term does not exist.' ) ); 
    14601508 
    14611509            $term_data['parent'] = $content_struct['parent']; 
     
    14761524            return new IXR_Error( 500, __( 'Sorry, your term could not be created. Something wrong happened.' ) ); 
    14771525 
    1478         return $term['term_id']; 
     1526        return strval( $term['term_id'] ); 
    14791527    } 
    14801528 
     
    14871535     *  - string  $username 
    14881536     *  - string  $password 
    1489      *  - int     $term_id 
     1537     *  - string  $term_id 
    14901538     *  - array   $content_struct 
    14911539     *      The $content_struct must contain: 
     
    15421590        if ( isset( $content_struct['parent'] ) ) { 
    15431591            if ( ! $taxonomy['hierarchical'] ) 
    1544                 return new IXR_Error( 403, __( 'This taxonomy is not hierarchical.' ) ); 
     1592                return new IXR_Error( 403, __( "This taxonomy is not hierarchical so you can't set a parent." ) ); 
    15451593 
    15461594            $parent_term_id = (int) $content_struct['parent']; 
     
    15481596 
    15491597            if ( is_wp_error( $parent_term ) ) 
    1550                 return new IXR_Error( 500, $term->get_error_message() ); 
     1598                return new IXR_Error( 500, $parent_term->get_error_message() ); 
    15511599 
    15521600            if ( ! $parent_term ) 
    1553                 return new IXR_Error( 403, __( 'Invalid parent term ID.' ) ); 
     1601                return new IXR_Error( 403, __( 'Parent term does not exist.' ) ); 
    15541602 
    15551603            $term_data['parent'] = $content_struct['parent']; 
     
    15821630     *  - string  $password 
    15831631     *  - string  $taxnomy_name 
    1584      *  - int     $term_id 
    1585      * @return boolean true 
     1632     *  - string     $term_id 
     1633     * @return boolean|IXR_Error If it suceeded true else a reason why not 
    15861634     */ 
    15871635    function wp_deleteTerm( $args ) { 
     
    15971645            return $this->error; 
    15981646 
    1599         do_action( 'xmlrpc_call', 'wp.editTerm' ); 
     1647        do_action( 'xmlrpc_call', 'wp.deleteTerm' ); 
    16001648 
    16011649        if ( ! taxonomy_exists( $taxonomy_name ) ) 
     
    16351683     *  - string  $password 
    16361684     *  - string  $taxonomy_name 
    1637      *  - int     $term_id 
     1685     *  - string  $term_id 
    16381686     * @return array contains: 
    16391687     *  - 'term_id' 
     
    16621710 
    16631711        if ( ! taxonomy_exists( $taxonomy_name ) ) 
    1664             return new IXR_Error( 403, __( 'Invalid taxonomy name.' ) ); 
     1712            return new IXR_Error( 403, __( 'Invalid taxonomy.' ) ); 
    16651713 
    16661714        $taxonomy = get_taxonomy( $taxonomy_name ); 
     
    16691717            return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); 
    16701718 
    1671         $term = get_term( $term_id , $taxonomy_name ); 
     1719        $term = get_term( $term_id , $taxonomy_name, ARRAY_A ); 
    16721720 
    16731721        if ( is_wp_error( $term ) ) 
     
    16771725            return new IXR_Error( 404, __( 'Invalid term ID.' ) ); 
    16781726 
    1679         return $this->prepare_term( $term ); 
     1727        return $this->_prepare_term( $term ); 
    16801728    } 
    16811729 
     
    16831731     * Retrieve all terms for a taxonomy. 
    16841732     * 
     1733     * The optional $filter parameter modifies the query used to retrieve terms. 
     1734     * Accepted keys are 'number', 'offset', 'orderby', 'order', 'hide_empty', and 'search'. 
     1735     * 
    16851736     * @uses get_terms() 
    16861737     * @param array $args Method parameters. Contains: 
     
    16881739     *  - string  $username 
    16891740     *  - string  $password 
    1690      *  - string   $taxonomy_name 
     1741     *  - string  $taxonomy_name 
     1742     *  - array   $filter optional 
    16911743     * @return array terms 
    16921744     */ 
     
    16981750        $password       = $args[2]; 
    16991751        $taxonomy_name  = $args[3]; 
     1752        $filter         = isset( $args[4] ) ? $args[4] : array(); 
    17001753 
    17011754        if ( ! $user = $this->login( $username, $password ) ) 
     
    17051758 
    17061759        if ( ! taxonomy_exists( $taxonomy_name ) ) 
    1707             return new IXR_Error( 403, __( 'Invalid taxonomy name.' ) ); 
     1760            return new IXR_Error( 403, __( 'Invalid taxonomy.' ) ); 
    17081761 
    17091762        $taxonomy = get_taxonomy( $taxonomy_name ); 
     
    17121765            return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); 
    17131766 
    1714         $terms = get_terms( $taxonomy_name , array( 'get' => 'all' ) ); 
     1767        $query = array(); 
     1768 
     1769        if ( isset( $filter['number'] ) ) 
     1770            $query['number'] = absint( $filter['number'] ); 
     1771 
     1772        if ( isset( $filter['offset'] ) ) 
     1773            $query['offset'] = absint( $filter['offset'] ); 
     1774 
     1775        if ( isset( $filter['orderby'] ) ) { 
     1776            $query['orderby'] = $filter['orderby']; 
     1777 
     1778            if ( isset( $filter['order'] ) ) 
     1779                $query['order'] = $filter['order']; 
     1780        } 
     1781 
     1782        if ( isset( $filter['hide_empty'] ) ) 
     1783            $query['hide_empty'] = $filter['hide_empty']; 
     1784        else 
     1785            $query['get'] = 'all'; 
     1786 
     1787        if ( isset( $filter['search'] ) ) 
     1788            $query['search'] = $filter['search']; 
     1789 
     1790        $terms = get_terms( $taxonomy_name, $query ); 
    17151791 
    17161792        if ( is_wp_error( $terms ) ) 
     
    17201796 
    17211797        foreach ( $terms as $term ) { 
    1722             $struct[] = $this->prepare_term( $term ); 
     1798            $struct[] = $this->_prepare_term( $term ); 
    17231799        } 
    17241800 
     
    17511827 
    17521828        if ( ! taxonomy_exists( $taxonomy_name ) ) 
    1753             return new IXR_Error( 403, __( 'The taxonomy type specified is not valid' ) ); 
     1829            return new IXR_Error( 403, __( 'Invalid taxonomy.' ) ); 
    17541830 
    17551831        $taxonomy = get_taxonomy( $taxonomy_name ); 
    17561832 
    1757         if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) 
    1758             return new IXR_Error( 401, __( 'Sorry, You are not allowed to edit this post type' ) ); 
    1759  
    1760         return $this->prepare_taxonomy( $taxonomy ); 
     1833        if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) 
     1834            return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); 
     1835 
     1836        return $this->_prepare_taxonomy( $taxonomy ); 
    17611837    } 
    17621838 
     
    17901866        foreach ( $taxonomies as $taxonomy ) { 
    17911867            // capability check for post_types 
    1792             if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) 
     1868            if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) 
    17931869                continue; 
    17941870 
    1795             $struct[] = $this->prepare_taxonomy( $taxonomy ); 
     1871            $struct[] = $this->_prepare_taxonomy( $taxonomy ); 
    17961872        } 
    17971873 
  • xml-rpc-modernization/trunk/readme.txt

    r502038 r510787  
    4646== Changelog == 
    4747 
     48= 0.7.5 = 
     49* Alignment with WordPress core progress on post and taxonomy methods. 
     50* Added `filter` parameter to wp.getTerms. 
     51* Added `featured_image` field support for post methods. 
     52* Fixed date-related bugs for draft posts. 
     53 
    4854= 0.7.1 = 
    4955* PHP 5.2.x compatibility fix. 
  • xml-rpc-modernization/trunk/wp-xmlrpc-modernization.php

    r502038 r510787  
    44 * Plugin Name: wp-xmlrpc-modernization 
    55 * Description: This plugin extends the basic XML-RPC API exposed by WordPress. Derived from GSoC '11 project. 
    6  * Version: 0.7.1 
     6 * Version: 0.7.5 
    77 * Author: Max Cutler 
    88 * Author URI: http://www.maxcutler.com 
Note: See TracChangeset for help on using the changeset viewer.