Make WordPress Core

Changeset 8114


Ignore:
Timestamp:
06/17/2008 08:41:13 PM (18 years ago)
Author:
westi
Message:

Add XMLRPC options api. See #7123 props josephscott.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/xmlrpc.php

    r8075 r8114  
    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
     
    172174                        'demo.addTwoNumbers' => 'this:addTwoNumbers'
    173175                );
     176
     177                $this->initialise_blog_option_info( );
    174178                $this->methods = apply_filters('xmlrpc_methods', $this->methods);
    175179                $this->IXR_Server($this->methods);
     
    254258                        }
    255259                }
     260        }
     261
     262        function initialise_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                                'option'                => 'siteurl'
     281                        ),
     282
     283                        // Updatable options
     284                        'time_zone'                     => array(
     285                                'desc'                  => __( 'Time Zone' ),
     286                                'readonly'              => false,
     287                                'option'                => 'gmt_offset'
     288                        ),
     289                        'blog_title'            => array(
     290                                'desc'                  => __( 'Blog Title' ),
     291                                'readonly'              => false,
     292                                'option'                        => 'blogname'
     293                        ),
     294                        'blog_tagline'          => array(
     295                                'desc'                  => __( 'Blog Tagline' ),
     296                                'readonly'              => false,
     297                                'option'                => 'blogdescription'
     298                        ),
     299                        'date_format'           => array(
     300                                'desc'                  => __( 'Date Format' ),
     301                                'readonly'              => false,
     302                                'option'                => 'date_format'
     303                        ),
     304                        'time_format'           => array(
     305                                'desc'                  => __( 'Time Format' ),
     306                                'readonly'              => false,
     307                                'option'                => 'time_format'
     308                        )
     309                );
     310
     311                $this->blog_options = apply_filters( 'xmlrpc_blog_options', $this->blog_options );
    256312        }
    257313
     
    863919        }
    864920
     921        function wp_getOptions( $args ) {
     922                $this->escape( $args );
     923
     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                        $options = array_keys($this->blog_options);
     937                }
     938
     939                return $this->_getOptions($options);
     940        }
     941
     942        function _getOptions($options)
     943        {
     944                $data = array( );
     945                foreach( $options as $option ) {
     946                        if( array_key_exists( $option, $this->blog_options ) )
     947                        {
     948                                $data[$option] = $this->blog_options[$option];
     949                                //Is the value static or dynamic?
     950                                if( isset( $data[$option]['option'] ) ) {
     951                                        $data[$option]['value'] = get_option( $data[$option]['option'] );
     952                                        unset($data[$option]['option']);
     953                                }
     954                        }
     955                }
     956
     957                return $data;
     958        }
     959
     960        function wp_setOptions( $args ) {
     961                $this->escape( $args );
     962
     963                $blog_id        = (int) $args[0];
     964                $username       = $args[1];
     965                $password       = $args[2];
     966                $options        = (array) $args[3];
     967
     968                if( !$this->login_pass_ok( $username, $password ) )
     969                        return new IXR_Error( 403, __( 'Bad login/pass combination.' ) );
     970
     971                $user = set_current_user( 0, $username );
     972                if( !current_user_can( 'manage_options' ) )
     973                        return new IXR_Error( 403, __( 'You are not allowed to update options.' ) );
     974
     975                foreach( $options as $o_name => $o_value ) {
     976                        $option_names[] = $o_name;
     977                        if( empty( $o_value ) )
     978                                continue;
     979
     980                        if( !array_key_exists( $o_name, $this->blog_options ) )
     981                                continue;
     982
     983                        if( $this->blog_options[$o_name]['readonly'] == true )
     984                                continue;
     985
     986                        update_option( $this->blog_options[$o_name]['option'], $o_value );
     987                }
     988
     989                //Now return the updated values
     990                return $this->_getOptions($option_names);
     991        }
    865992
    866993        /* Blogger API functions
Note: See TracChangeset for help on using the changeset viewer.