WordPress.org

Make WordPress Core

Ticket #7123: xmlrpc.php.diff

File xmlrpc.php.diff, 4.4 KB (added by josephscott, 10 years ago)
  • xmlrpc.php

     
    127127                        'wp.getPostStatusList'  => 'this:wp_getPostStatusList',
    128128                        'wp.getPageStatusList'  => 'this:wp_getPageStatusList',
    129129                        'wp.getPageTemplates'   => 'this:wp_getPageTemplates',
     130                        'wp.getOptions'                 => 'this:wp_getOptions',
     131                        'wp.setOptions'                 => 'this:wp_setOptions',
    130132
    131133                        // Blogger API
    132134                        'blogger.getUsersBlogs' => 'this:blogger_getUsersBlogs',
     
    171173                        'demo.sayHello' => 'this:sayHello',
    172174                        'demo.addTwoNumbers' => 'this:addTwoNumbers'
    173175                );
     176
     177                $this->update_blog_option_info( );
    174178                $this->methods = apply_filters('xmlrpc_methods', $this->methods);
    175179                $this->IXR_Server($this->methods);
    176180        }
     
    255259                }
    256260        }
    257261
     262        function update_blog_option_info( ) {
     263                global $wp_version;
     264
     265                $this->blog_options = array(
     266                        // Read only options
     267                        'software_name'         => array(
     268                                'desc'                  => __( 'Software Name' ),
     269                                'readonly'              => true,
     270                                'value'                 => 'WordPress'
     271                        ),
     272                        'software_version'      => array(
     273                                'desc'                  => __( 'Software Version' ),
     274                                'readonly'              => true,
     275                                'value'                 => $wp_version
     276                        ),
     277                        'blog_url'                      => array(
     278                                'desc'                  => __( 'Blog URL' ),
     279                                'readonly'              => true,
     280                                'value'                 => get_option( 'siteurl' )
     281                        ),
     282
     283                        // Updatable options
     284                        'time_zone'                     => array(
     285                                'desc'                  => __( 'Time Zone' ),
     286                                'readonly'              => false,
     287                                'value'                 => get_option( 'gmt_offset' )
     288                        ),
     289                        'blog_title'            => array(
     290                                'desc'                  => __( 'Blog Title' ),
     291                                'readonly'              => false,
     292                                'value'                 => get_option( 'blogname' )
     293                        ),
     294                        'blog_tagline'          => array(
     295                                'desc'                  => __( 'Blog Tagline' ),
     296                                'readonly'              => false,
     297                                'value'                 => get_option( 'blogdescription' )
     298                        ),
     299                        'date_format'           => array(
     300                                'desc'                  => __( 'Date Format' ),
     301                                'readonly'              => false,
     302                                'value'                 => get_option( 'date_format' )
     303                        ),
     304                        'time_format'           => array(
     305                                'desc'                  => __( 'Time Format' ),
     306                                'readonly'              => false,
     307                                'value'                 => get_option( 'time_format' )
     308                        )
     309                );
     310
     311                $this->blog_options = apply_filters( 'xmlrpc_blog_options', $this->blog_options );
     312        }
     313
    258314        /**
    259315         * WordPress XML-RPC API
    260316         * wp_getUsersBlogs
     
    862918                return $templates;
    863919        }
    864920
     921        function wp_getOptions( $args ) {
     922                $this->escape( $args );
    865923
     924                $blog_id        = (int) $args[0];
     925                $username       = $args[1];
     926                $password       = $args[2];
     927                $options        = (array) $args[3];
     928
     929                if( !$this->login_pass_ok( $username, $password ) )
     930                        return new IXR_Error( 403, __( 'Bad login/pass combination.' ) );
     931
     932                $user = set_current_user( 0, $username );
     933
     934                // If no specific options where asked for, return all of them
     935                if( count( $options ) == 0 )
     936                        return $this->blog_options;
     937
     938                $data = array( );
     939                foreach( $options as $option ) {
     940                        if( array_key_exists( $option, $this->blog_options ) )
     941                                $data[$option] = $this->blog_options[$option];
     942                }
     943
     944                return $data;
     945        }
     946
     947        function wp_setOptions( $args ) {
     948                $this->escape( $args );
     949
     950                $blog_id        = (int) $args[0];
     951                $username       = $args[1];
     952                $password       = $args[2];
     953                $options        = (array) $args[3];
     954
     955                if( !$this->login_pass_ok( $username, $password ) )
     956                        return new IXR_Error( 403, __( 'Bad login/pass combination.' ) );
     957
     958                $user = set_current_user( 0, $username );
     959                if( !current_user_can( 'manage_options' ) )
     960                        return new IXR_Error( 403, __( 'You are not allowed to update options.' ) );
     961
     962                foreach( $options as $o_name => $o_value ) {
     963                        if( empty( $o_value ) )
     964                                continue;
     965
     966                        if( !array_key_exists( $o_name, $this->blog_options ) )
     967                                continue;
     968
     969                        if( $this->blog_options[$o_name]['readonly'] == true )
     970                                continue;
     971
     972                        switch( $o_name ) {
     973                                case 'blog_title':
     974                                        update_option( 'blogname', $o_value );
     975                                        break;
     976                                case 'blog_tagline':
     977                                        update_option( 'blogdescription', $o_value );
     978                                        break;
     979                                case 'time_zone':
     980                                        update_option( 'gmt_offset', $o_value );
     981
     982                                // date_format, time_format
     983                                default:
     984                                        update_option( $o_name, $o_value );
     985                                        break;
     986                        }
     987                }
     988
     989                $this->update_blog_option_info( );
     990
     991                $data = array( );
     992                foreach( $options as $o_name => $o_value ) {
     993                        if( array_key_exists( $o_name, $this->blog_options ) )
     994                                $data[$o_name] = $this->blog_options[$o_name];
     995                }
     996
     997                return $data;
     998        }
     999
    8661000        /* Blogger API functions
    8671001         * specs on http://plant.blogger.com/api and http://groups.yahoo.com/group/bloggerDev/
    8681002         */