WordPress.org

Make WordPress Core

Ticket #7123: xmlrpc.php.diff

File xmlrpc.php.diff, 4.4 KB (added by josephscott, 6 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         */