Completed
Push — renovate/history-4.x ( 8706da...6c1ea7 )
by
unknown
17:57 queued 11:18
created

...om-json-api-get-comments-tree-v1-2-endpoint.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
new WPCOM_JSON_API_Get_Comments_Tree_v1_2_Endpoint( array(
4
	'description' => 'Get a comments tree for site.',
5
	'min_version' => '1.2',
6
	'max_version' => '1.2',
7
	'group'       => 'comments-tree',
8
	'stat'        => 'comments-tree:1',
9
10
	'method'      => 'GET',
11
	'path'        =>  '/sites/%s/comments-tree',
12
	'path_labels' => array(
13
		'$site' => '(int|string) Site ID or domain',
14
	),
15
	'query_parameters' => array(
16
		'post_id' => '(int) Filter returned comments by a post.',
17
		'status'   => '(string) Filter returned comments based on this value (allowed values: all, approved, pending, trash, spam).',
18
	),
19
	'response_format' => array(
20
		'comments_tree'    => '(array) Array of post IDs representing the comments tree for given site or post (max 50000)',
21
		'trackbacks_tree'  => '(array) Array of post IDs representing the trackbacks tree for given site or post (max 50000)',
22
		'pingbacks_tree'   => '(array) Array of post IDs representing the pingbacks tree for given site or post (max 50000)',
23
	),
24
25
	'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/en.blog.wordpress.com/comments-tree?&status=approved&post_id=123',
26
) );
27
28
class WPCOM_JSON_API_Get_Comments_Tree_v1_2_Endpoint extends WPCOM_JSON_API_Get_Comments_Tree_v1_1_Endpoint {
29
	/**
30
	 * Retrieves a list of comment data.
31
	 *
32
	 * @param array $args {
33
	 *     Optional. Arguments to control behavior. Default empty array.
34
	 *
35
	 *     @type int    $max_comment_count Maximum number of comments returned.
36
	 *     @type int    $post_id           Filter by post.
37
	 *     @type int    $start_at          First comment to search from going back in time.
38
	 *     @type string $status            Filter by status: all, approved, pending, spam or trash.
39
	 * }
40
	 *
41
	 * @return array
42
	 */
43
	function get_site_tree_v1_2( $args = array() ) {
44
		global $wpdb;
45
		$defaults = array(
46
			'max_comment_count' => 50000,
47
			'post_id'           => NULL,
48
			'start_at'          => PHP_INT_MAX,
49
			'status'            => 'all',
50
		);
51
		$args = wp_parse_args( $args, $defaults );
0 ignored issues
show
$defaults is of type array<string,integer|nul...er","status":"string"}>, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
52
		$db_status = $this->get_comment_db_status( $args['status'] );
53
54
		if ( ! empty( $args['post_id'] ) ) {
55
			$db_comment_rows = $wpdb->get_results(
56
				$wpdb->prepare(
57
					"SELECT comment_ID, comment_parent, comment_type " .
58
					"FROM $wpdb->comments AS comments " .
59
					"WHERE comment_ID <= %d AND comment_post_ID = %d AND ( %s = 'all' OR comment_approved = %s ) " .
60
					"ORDER BY comment_ID DESC " .
61
					"LIMIT %d",
62
					(int) $args['start_at'], (int) $args['post_id'], $db_status, $db_status, $args['max_comment_count']
63
				),
64
				ARRAY_N
65
			);
66
		} else {
67
			$db_comment_rows = $wpdb->get_results(
68
				$wpdb->prepare(
69
					"SELECT comment_ID, comment_parent, comment_type, comment_post_ID " .
70
					"FROM $wpdb->comments AS comments " .
71
					"INNER JOIN $wpdb->posts AS posts ON comments.comment_post_ID = posts.ID " .
72
					"WHERE comment_ID <= %d AND ( %s = 'all' OR comment_approved = %s ) " .
73
					"ORDER BY comment_ID DESC " .
74
					"LIMIT %d",
75
					(int) $args['start_at'], $db_status, $db_status, $args['max_comment_count']
76
				),
77
				ARRAY_N
78
			);
79
		}
80
81
		$comments = array();
82
		$trackbacks = array();
83
		$pingbacks = array();
84
		foreach ( $db_comment_rows as $row ) {
85
			$comment_id = intval( $row[0] );
86
			$comment_parent_id = intval( $row[1] );
87
			$comment_post_id = isset( $args['post_id'] ) ? intval( $args['post_id'] ) : intval( $row[3] );
88
89
			if ( ! isset( $comments[ $comment_post_id ] ) ) {
90
				$comments[ $comment_post_id ] = array( array(), array() );
91
			}
92 View Code Duplication
			switch ( $row[2] ) {
93
				case 'trackback':
94
					$trackbacks[ $comment_post_id ][] = $comment_id;
95
					break;
96
				case 'pingback':
97
					$pingbacks[ $comment_post_id ][] = $comment_id;
98
					break;
99
				default:
100
					if ( 0 === $comment_parent_id ) {
101
						$comments[ $comment_post_id ][0][] = $comment_id;
102
					} else {
103
						$comments[ $comment_post_id ][1][] = array( $comment_id, $comment_parent_id );
104
					}
105
			}
106
		}
107
108
		return array(
109
			'comments_tree' => $comments,
110
			'trackbacks_tree' => $trackbacks,
111
			'pingbacks_tree' => $pingbacks,
112
		);
113
	}
114
115
	/**
116
	 * Endpoint callback for /sites/%s/comments-tree
117
	 *
118
	 * @param string $path
119
	 * @param int    $blog_id
120
	 *
121
	 * @return array Site or post tree results by status.
122
	 */
123
	function callback( $path = '', $blog_id = 0 ) {
124
		$blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
125
		if ( is_wp_error( $blog_id ) ) {
126
			return $blog_id;
127
		}
128
129
		$args = $this->query_args();
130
		$filters = array();
131
132
		if ( ! empty( $args['status'] ) ) {
133
			if ( ! $this->validate_status_param( $args['status'] ) ) {
134
				return new WP_Error( 'invalid_status', 'Invalid comment status value provided: ' . $args['status'] . '.', 400 );
135
			}
136
			$filters['status'] = $args['status'];
137
		}
138
139
		if ( ! empty( $args['post_id'] ) ) {
140
			if ( is_null( get_post( absint( $args['post_id'] ) ) ) ) {
141
				return new WP_Error( 'invalid_post', 'Invalid post', 400 );
142
			}
143
			$filters['post_id'] = absint( $args['post_id'] );
144
		}
145
146
		return $this->get_site_tree_v1_2( $filters );
147
	}
148
}
149