Make WordPress Core

Changeset 8543


Ignore:
Timestamp:
08/04/2008 10:29:37 PM (16 years ago)
Author:
ryan
Message:

XML-RPC comments API. see #7446

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/comment-template.php

    r8497 r8543  
    321321 * @uses $comment
    322322 *
     323 * @param object|string|int $comment Comment to retrieve.
    323324 * @return string The permalink to the current comment
    324325 */
    325 function get_comment_link() {
    326     global $comment;
     326function get_comment_link($comment = null) {
     327    $comment = get_comment($comment);
    327328    return get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID;
    328329}
  • trunk/wp-includes/comment.php

    r8091 r8543  
    44 *
    55 * @package WordPress
     6 * @subpackage Comment
    67 */
    78
     
    163164
    164165/**
    165  * Retrieve an array of comment data about comment $comment_ID.
    166  *
    167  * get_comment() technically does the same thing as this function. This function
    168  * also appears to reference variables and then not use them or not update them
    169  * when needed. It is advised to switch to get_comment(), since this function
    170  * might be deprecated in favor of using get_comment().
    171  *
    172  * @deprecated Use get_comment()
    173  * @see get_comment()
    174  * @since 0.71
    175  *
    176  * @uses $postc Comment cache, might not be used any more
    177  * @uses $id
    178  * @uses $wpdb Database Object
    179  *
    180  * @param int $comment_ID The ID of the comment
    181  * @param int $no_cache Whether to use the cache or not (casted to bool)
    182  * @param bool $include_unapproved Whether to include unapproved comments or not
    183  * @return array The comment data
    184  */
    185 function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) {
    186     global $postc, $wpdb;
    187     if ( $no_cache ) {
    188         $query = $wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_ID = %d", $comment_ID);
    189         if ( false == $include_unapproved )
    190             $query .= " AND comment_approved = '1'";
    191         $myrow = $wpdb->get_row($query, ARRAY_A);
     166 * Retrieve a list of comments
     167 *
     168 * {@internal Missing Long Description}}
     169 *
     170 * @package WordPress
     171 * @subpackage Comment
     172 * @since 2.7
     173 * @uses $wpdb
     174 *
     175 * @param mixed $args Optional. Array or string of options
     176 * @return array List of comments matching defaults or $args
     177 */
     178function get_comments( $args = '' ) {
     179    global $wpdb;
     180
     181    $defaults = array('status' => '', 'orderby' => 'comment_date_gmt', 'order' => 'DESC', 'number' => '', 'offset' => '', 'post_id' => 0);
     182
     183    $r = wp_parse_args( $args, $defaults );
     184    extract( $r, EXTR_SKIP );
     185
     186    $post_id = absint($post_id);
     187
     188    if ( 'hold' == $status )
     189        $approved = "comment_approved = '0'";
     190    elseif ( 'approve' == $status )
     191        $approved = "comment_approved = '1'";
     192    elseif ( 'spam' == $status )
     193        $approved = "comment_approved = 'spam'";
     194    else
     195        $approved = "( comment_approved = '0' OR comment_approved = '1' )";
     196
     197    if ( 'ASC' != $order )
     198        $order = 'DESC';
     199
     200    $orderby = 'comment_date_gmt';  // Hard code for now
     201
     202    $number = absint($number);
     203    $offset = absint($offset);
     204
     205    if ( !empty($number) ) {
     206        if ( $offset )
     207            $number = 'LIMIT ' . $offset . ',' . $number;
     208        else
     209            $number = 'LIMIT ' . $number;
     210
    192211    } else {
    193         $myrow['comment_ID']           = $postc->comment_ID;
    194         $myrow['comment_post_ID']      = $postc->comment_post_ID;
    195         $myrow['comment_author']       = $postc->comment_author;
    196         $myrow['comment_author_email'] = $postc->comment_author_email;
    197         $myrow['comment_author_url']   = $postc->comment_author_url;
    198         $myrow['comment_author_IP']    = $postc->comment_author_IP;
    199         $myrow['comment_date']         = $postc->comment_date;
    200         $myrow['comment_content']      = $postc->comment_content;
    201         $myrow['comment_karma']        = $postc->comment_karma;
    202         $myrow['comment_approved']     = $postc->comment_approved;
    203         $myrow['comment_type']         = $postc->comment_type;
    204     }
    205     return $myrow;
    206 }
     212        $number = '';
     213    }
     214
     215    if ( ! empty($post_id) )
     216        $post_where = "comment_post_ID = $post_id AND";
     217    else
     218        $post_where = '';
     219
     220    return $wpdb->get_results( "SELECT * FROM $wpdb->comments USE INDEX (comment_date_gmt) WHERE $post_where $approved ORDER BY $orderby $order $number" );
     221}
     222
     223/**
     224 * Retrieve all of the WordPress supported comment statuses.
     225 *
     226 * Comments have a limited set of valid status values, this provides the
     227 * comment status values and descriptions.
     228 *
     229 * @package WordPress
     230 * @subpackage Post
     231 * @since 2.7
     232 *
     233 * @return array List of comment statuses.
     234 */
     235function get_comment_statuses( ) {
     236    $status = array(
     237        'hold'      => __('Unapproved'),
     238        'approve'   => __('Approved'),
     239        'spam'      => __('Spam'),
     240    );
     241
     242    return $status;
     243}
     244
    207245
    208246/**
     
    822860
    823861    $comment_date_gmt = get_gmt_from_date($comment_date);
     862
     863    if ( empty($comment_approved) )
     864        $comment_approved = 1;
     865    else if ( 'hold' == $comment_approved )
     866        $comment_approved = 0;
     867    else if ( 'approve' == $comment_approved )
     868        $comment_approved = 1;
    824869
    825870    $wpdb->query( $wpdb->prepare("UPDATE $wpdb->comments SET
  • trunk/wp-includes/deprecated.php

    r8285 r8543  
    12841284    return false;
    12851285}
     1286
     1287/**
     1288 * Retrieve an array of comment data about comment $comment_ID.
     1289 *
     1290 * @deprecated Use get_comment()
     1291 * @see get_comment()
     1292 * @since 0.71
     1293 *
     1294 * @uses $id
     1295 * @uses $wpdb Database Object
     1296 *
     1297 * @param int $comment_ID The ID of the comment
     1298 * @param int $no_cache Whether to use the cache or not (casted to bool)
     1299 * @param bool $include_unapproved Whether to include unapproved comments or not
     1300 * @return array The comment data
     1301 */
     1302function get_commentdata( $comment_ID, $no_cache = 0, $include_unapproved = false ) {
     1303    _deprecated_function( __FUNCTION__, '2.7', 'get_comment()' );
     1304    return get_comment($comment_ID, ARRAY_A);
     1305}
     1306
    12861307?>
  • trunk/xmlrpc.php

    r8444 r8543  
    130130            'wp.getOptions'         => 'this:wp_getOptions',
    131131            'wp.setOptions'         => 'this:wp_setOptions',
     132            'wp.getComment'         => 'this:wp_getComment',
     133            'wp.getComments'        => 'this:wp_getComments',
     134            'wp.deleteComment'      => 'this:wp_deleteComment',
     135            'wp.editComment'        => 'this:wp_editComment',
     136            'wp.newComment'         => 'this:wp_newComment',
     137            'wp.getCommentStatusList' => 'this:wp_getCommentStatusList',
    132138
    133139            // Blogger API
     
    830836    }
    831837
     838    function wp_getComment($args) {
     839        $this->escape($args);
     840
     841        $blog_id    = (int) $args[0];
     842        $username   = $args[1];
     843        $password   = $args[2];
     844        $comment_id = (int) $args[3];
     845
     846        if ( !$this->login_pass_ok( $username, $password ) )
     847            return $this->error;
     848
     849        set_current_user( 0, $username );
     850        if ( !current_user_can( 'moderate_comments' ) )
     851            return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this blog.' ) );
     852
     853        do_action('xmlrpc_call', 'wp.getComment');
     854
     855        if ( ! $comment = get_comment($comment_id) )
     856            return new IXR_Error( 404, __( 'Invalid comment ID.' ) );
     857
     858        // Format page date.
     859        $comment_date = mysql2date("Ymd\TH:i:s", $comment->comment_date);
     860        $comment_date_gmt = mysql2date("Ymd\TH:i:s", $comment->comment_date_gmt);
     861
     862        if ( 0 == $comment->comment_approved )
     863            $comment_status = 'hold';
     864        else if ( 'spam' == $comment->comment_approved )
     865            $comment_status = 'spam';
     866        else
     867            $comment_status = 'approve';
     868
     869        $link = get_comment_link($comment);
     870
     871        $comment_struct = array(
     872            "date_created_gmt"      => new IXR_Date($comment_date_gmt),
     873            "user_id"               => $comment->user_id,
     874            "comment_id"            => $comment->comment_ID,
     875            "parent"                => $comment->comment_parent,
     876            "status"                => $comment_status,
     877            "content"               => $comment->comment_content,
     878            "link"                  => $link,
     879            "post_id"               => $comment->comment_post_ID,
     880            "post_title"            => get_the_title($comment->comment_post_ID),
     881            "author"                => $author->comment_author,
     882            "author_url"            => $comment->comment_author_url,
     883            "author_email"          => $comment->comment_author_email,
     884            "author_ip"             => $comment->comment_author_IP,
     885        );
     886
     887        return $comment_struct;
     888    }
     889
     890    function wp_getComments($args) {
     891        $this->escape($args);
     892
     893        $blog_id    = (int) $args[0];
     894        $username   = $args[1];
     895        $password   = $args[2];
     896        $struct     = $args[3];
     897
     898        if ( !$this->login_pass_ok($username, $password) )
     899            return($this->error);
     900
     901        set_current_user( 0, $username );
     902        if ( !current_user_can( 'moderate_comments' ) )
     903            return new IXR_Error( 401, __( 'Sorry, you can not edit comments.' ) );
     904
     905        do_action('xmlrpc_call', 'wp.getComments');
     906
     907        if ( isset($struct['status']) )
     908            $status = $struct['status'];
     909        else
     910            $status = '';
     911
     912        $post_id = '';
     913        if ( isset($struct['post_id']) )
     914            $post_id = absint($struct['post_id']);
     915
     916        $offset = 0;
     917        if ( isset($struct['offset']) )
     918            $offset = absint($struct['offset']);
     919
     920        $number = 10;
     921        if ( isset($struct['number']) )
     922            $number = absint($struct['number']);
     923
     924        $comments = get_comments( array('status' => $status, 'post_id' => $post_id, 'offset' => $offset, 'number' => $number ) );
     925        $num_comments = count($comments);
     926
     927        if ( ! $num_comments )
     928            return array();
     929
     930        $comments_struct = array();
     931
     932        for ( $i = 0; $i < $num_comments; $i++ ) {
     933            $comment = wp_xmlrpc_server::wp_getComment(array(
     934                $blog_id, $username, $password, $comments[$i]->comment_ID,
     935            ));
     936            $comments_struct[] = $comment;
     937        }
     938
     939        return $comments_struct;
     940    }
     941
     942    function wp_deleteComment($args) {
     943        $this->escape($args);
     944
     945        $blog_id    = (int) $args[0];
     946        $username   = $args[1];
     947        $password   = $args[2];
     948        $comment_ID = (int) $args[3];
     949
     950        if ( !$this->login_pass_ok( $username, $password ) )
     951            return $this->error;
     952
     953        set_current_user( 0, $username );
     954        if ( !current_user_can( 'moderate_comments' ) )
     955            return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this blog.' ) );
     956
     957        do_action('xmlrpc_call', 'wp.deleteComment');
     958
     959        if ( ! get_comment($comment_ID) )
     960            return new IXR_Error( 404, __( 'Invalid comment ID.' ) );
     961
     962        return wp_delete_comment($comment_ID);
     963    }
     964
     965    function wp_editComment($args) {
     966        $this->escape($args);
     967
     968        $blog_id    = (int) $args[0];
     969        $username   = $args[1];
     970        $password   = $args[2];
     971        $comment_ID = (int) $args[3];
     972        $content_struct = $args[4];
     973
     974        if ( !$this->login_pass_ok( $username, $password ) )
     975            return $this->error;
     976
     977        set_current_user( 0, $username );
     978        if ( !current_user_can( 'moderate_comments' ) )
     979            return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this blog.' ) );
     980
     981        do_action('xmlrpc_call', 'wp.editComment');
     982
     983        if ( ! get_comment($comment_ID) )
     984            return new IXR_Error( 404, __( 'Invalid comment ID.' ) );
     985
     986        if ( isset($content_struct['status']) ) {
     987            $statuses = get_comment_statuses();
     988            $statuses = array_keys($statuses);
     989
     990            if ( ! in_array($content_struct['status'], $statuses) )
     991                return new IXR_Error( 401, __( 'Invalid comment status.' ) );
     992            $comment_approved = $content_struct['status'];
     993        }
     994
     995        // Do some timestamp voodoo
     996        if ( !empty( $content_struct['date_created_gmt'] ) ) {
     997            $dateCreated = str_replace( 'Z', '', $content_struct['date_created_gmt']->getIso() ) . 'Z'; // We know this is supposed to be GMT, so we're going to slap that Z on there by force
     998            $comment_date = get_date_from_gmt(iso8601_to_datetime($dateCreated));
     999            $comment_date_gmt = iso8601_to_datetime($dateCreated, GMT);
     1000        }
     1001
     1002        if ( isset($content_struct['content']) )
     1003            $comment_content = $content_struct['content'];
     1004
     1005        if ( isset($content_struct['author']) )
     1006            $comment_author = $content_struct['author'];
     1007
     1008        if ( isset($content_struct['author_url']) )
     1009            $comment_author_url = $content_struct['author_url'];
     1010
     1011        if ( isset($content_struct['author_email']) )
     1012            $comment_author_email = $content_struct['author_email'];
     1013
     1014        // We've got all the data -- post it:
     1015        $comment = compact('comment_ID', 'comment_content', 'comment_approved', 'comment_date', 'comment_date_gmt', 'comment_author', 'comment_author_email', 'comment_author_url');
     1016       
     1017        $result = wp_update_comment($comment);
     1018        if ( is_wp_error( $result ) )
     1019            return new IXR_Error(500, $result->get_error_message());
     1020
     1021        if ( !$result )
     1022            return new IXR_Error(500, __('Sorry, the comment could not be edited. Something wrong happened.'));
     1023
     1024        return true;
     1025    }
     1026
     1027    function wp_newComment($args) {
     1028        global $wpdb;
     1029
     1030        $this->escape($args);
     1031
     1032        $blog_id    = (int) $args[0];
     1033        $username   = $args[1];
     1034        $password   = $args[2];
     1035        $post       = $args[3];
     1036        $content_struct = $args[4];
     1037
     1038        $allow_anon = apply_filters('xmlrpc_allow_anonymous_comments', false);
     1039
     1040        if ( !$this->login_pass_ok( $username, $password ) ) {
     1041            $logged_in = false;
     1042            if ( $allow_anon && get_option('comment_registration') )
     1043                return new IXR_Error( 403, __( 'You must be registered to comment' ) );
     1044            else if ( !$allow_anon )
     1045                return $this->error;
     1046        } else {
     1047            $logged_in = true;
     1048            set_current_user( 0, $username );
     1049            if ( !current_user_can( 'moderate_comments' ) )
     1050                return new IXR_Error( 403, __( 'You are not allowed to moderate comments on this blog.' ) );
     1051        }
     1052
     1053        if ( is_numeric($post) )
     1054            $post_id = absint($post);
     1055        else
     1056            $post_id = url_to_postid($post);
     1057
     1058        if ( ! $post_id )
     1059            return new IXR_Error( 404, __( 'Invalid post ID.' ) );
     1060
     1061        if ( ! get_post($post_id) )
     1062            return new IXR_Error( 404, __( 'Invalid post ID.' ) );
     1063
     1064        $comment['comment_post_ID'] = $post_id;
     1065
     1066        if ( $logged_in ) {
     1067            $user = wp_get_current_user();
     1068            $comment['comment_author'] = $wpdb->escape( $user->display_name );
     1069            $comment['comment_author_email'] = $wpdb->escape( $user->user_email );
     1070            $comment['comment_author_url'] = $wpdb->escape( $user->user_url );
     1071            $comment['user_ID'] = $user->ID;
     1072        } else {
     1073            $comment['comment_author'] = '';
     1074            if ( isset($content_struct['author']) )
     1075                $comment['comment_author'] = $content_struct['author'];
     1076            $comment['comment_author_email'] = '';
     1077            if ( isset($content_struct['author']) )
     1078                $comment['comment_author_email'] = $content_struct['author_email'];
     1079            $comment['comment_author_url'] = '';
     1080            if ( isset($content_struct['author']) )
     1081                $comment['comment_author_url'] = $content_struct['author_url'];
     1082            $comment['user_ID'] = 0;
     1083
     1084            if ( get_option('require_name_email') ) {
     1085                if ( 6 > strlen($comment['comment_author_email']) || '' == $comment['comment_author'] )
     1086                    return new IXR_Error( 403, __( 'Comment author name and email are required' ) );
     1087                elseif ( !is_email($comment['comment_author_email']) )
     1088                    return new IXR_Error( 403, __( 'A valid email address is required' ) );
     1089            }
     1090        }
     1091
     1092        $comment['comment_content'] = $content_struct['content'];
     1093
     1094        do_action('xmlrpc_call', 'wp.newComment');
     1095       
     1096        return wp_new_comment($comment);
     1097    }
     1098
     1099    function wp_getCommentStatusList($args) {
     1100        $this->escape( $args );
     1101
     1102        $blog_id    = (int) $args[0];
     1103        $username   = $args[1];
     1104        $password   = $args[2];
     1105
     1106        if ( !$this->login_pass_ok( $username, $password ) )
     1107            return $this->error;
     1108
     1109        set_current_user( 0, $username );
     1110        if ( !current_user_can( 'moderate_comments' ) )
     1111            return new IXR_Error( 403, __( 'You are not allowed access to details about this blog.' ) );
     1112
     1113        do_action('xmlrpc_call', 'wp.getCommentStatusList');
     1114
     1115        return get_comment_statuses( );
     1116    }
     1117
    8321118    function wp_getCommentCount( $args ) {
    8331119        $this->escape($args);
     
    8571143        );
    8581144    }
    859 
    8601145
    8611146    function wp_getPostStatusList( $args ) {
Note: See TracChangeset for help on using the changeset viewer.