Make WordPress Core

Changeset 8114


Ignore:
Timestamp:
06/17/2008 08:41:13 PM (17 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.