Make WordPress Core

Ticket #41775: allow-comment-types.diff

File allow-comment-types.diff, 3.1 KB (added by langan, 7 years ago)

Diff of changes to class-wp-rest-comments-controller.php

  • wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php

    diff --git wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php
    index e91fce209f..d00710291b 100644
    class WP_REST_Comments_Controller extends WP_REST_Controller { 
    2525        protected $meta;
    2626
    2727        /**
     28         * List of default allowed comment types
     29         *
     30         * @since ??
     31         * @access private
     32         * @var array
     33         */
     34        private $default_allowed_types;
     35
     36        /**
    2837         * Constructor.
    2938         *
    3039         * @since 4.7.0
    class WP_REST_Comments_Controller extends WP_REST_Controller { 
    3241        public function __construct() {
    3342                $this->namespace = 'wp/v2';
    3443                $this->rest_base = 'comments';
     44                $this->default_allowed_types = array('comment');
    3545
    3646                $this->meta = new WP_REST_Comment_Meta_Fields();
    3747        }
    class WP_REST_Comments_Controller extends WP_REST_Controller { 
    140150                                                $forbidden_params[] = $param;
    141151                                        }
    142152                                } elseif ( 'type' === $param ) {
    143                                         if ( 'comment' !== $request[ $param ] ) {
     153                                        if ( false === in_array($request[ $param ], apply_filters( 'rest_allow_comment_types', $this->default_allowed_types, $request ) ) ) {
    144154                                                $forbidden_params[] = $param;
    145155                                        }
    146156                                } elseif ( ! empty( $request[ $param ] ) ) {
    class WP_REST_Comments_Controller extends WP_REST_Controller { 
    482492                }
    483493
    484494                // Do not allow comments to be created with a non-default type.
    485                 if ( ! empty( $request['type'] ) && 'comment' !== $request['type'] ) {
     495                if ( ! empty( $request['type'] ) && false === in_array($request['type'], apply_filters( 'rest_allow_comment_types', $this->default_allowed_types, $request ) ) ) {
    486496                        return new WP_Error( 'rest_invalid_comment_type', __( 'Cannot create a comment with that type.' ), array( 'status' => 400 ) );
    487497                }
    488498
    class WP_REST_Comments_Controller extends WP_REST_Controller { 
    491501                        return $prepared_comment;
    492502                }
    493503
    494                 $prepared_comment['comment_type'] = '';
    495 
    496504                /*
    497505                 * Do not allow a comment to be created with missing or empty
    498506                 * comment_content. See wp_handle_comment_submission().
    class WP_REST_Comments_Controller extends WP_REST_Controller { 
    673681                $id = $comment->comment_ID;
    674682
    675683                if ( isset( $request['type'] ) && get_comment_type( $id ) !== $request['type'] ) {
    676                         return new WP_Error( 'rest_comment_invalid_type', __( 'Sorry, you are not allowed to change the comment type.' ), array( 'status' => 404 ) );
     684                        if ( !in_array($request['type'], apply_filters( 'rest_allow_comment_types', $this->default_allowed_types, $request ) ) ) {
     685                                return new WP_Error( 'rest_comment_invalid_type', __( 'Sorry, you are not allowed to change the comment type.' ), array( 'status' => 404 ) );
     686                        }
    677687                }
    678688
    679689                $prepared_args = $this->prepare_item_for_database( $request );
    class WP_REST_Comments_Controller extends WP_REST_Controller { 
    11181128                        }
    11191129                }
    11201130
     1131                if ( ! empty( $request['type'] ) ) {
     1132                        $prepared_comment['comment_type'] = $request['type'];
     1133                }
     1134
    11211135                /**
    11221136                 * Filters a comment after it is prepared for the database.
    11231137                 *