PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | jetpack_vendor/automattic/jetpack-import/src/endpoints/class-comment.php +114 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,114 @@
1 +<?php
2 +/**
3 + * Comments REST route
4 + *
5 + * @package automattic/jetpack-import
6 + */
7 +
8 +namespace Automattic\Jetpack\Import\Endpoints;
9 +
10 +use WP_Error;
11 +use WP_REST_Request;
12 +use WP_REST_Response;
13 +
14 +if ( ! defined( 'ABSPATH' ) ) {
15 + exit( 0 );
16 +}
17 +
18 +/**
19 + * Class Comment
20 + */
21 +class Comment extends \WP_REST_Comments_Controller {
22 +
23 + /**
24 + * Base class
25 + */
26 + use Import;
27 +
28 + /**
29 + * The Import ID add a new item to the schema.
30 + */
31 + use Import_ID;
32 +
33 + /**
34 + * Whether the controller supports batching.
35 + *
36 + * @var array
37 + */
38 + protected $allow_batch = array( 'v1' => true );
39 +
40 + /**
41 + * Constructor.
42 + */
43 + public function __construct() {
44 + parent::__construct();
45 +
46 + // @see add_comment_meta
47 + $this->import_id_meta_type = 'comment';
48 + }
49 +
50 + /**
51 + * Creates a comment.
52 + *
53 + * @param WP_REST_Request $request Full details about the request.
54 + * @return WP_REST_Response|WP_Error Response object on success, or error object on failure.
55 + */
56 + public function create_item( $request ) {
57 + // Set the WP_IMPORTING constant to prevent sync notifications
58 + $this->set_importing();
59 + // Resolve comment post ID.
60 + if ( ! empty( $request['post'] ) ) {
61 + $posts = \get_posts( $this->get_import_db_query( $request['post'] ) );
62 +
63 + // Overwrite the comment parent post ID.
64 + $request['post'] = is_array( $posts ) && count( $posts ) ? $posts[0] : 0;
65 + }
66 +
67 + // Resolve comment parent ID.
68 + if ( ! empty( $request['parent'] ) ) {
69 + $comments = \get_comments( $this->get_import_db_query( $request['parent'] ) );
70 +
71 + // Overwrite the comment parent post ID.
72 + $request['parent'] = is_array( $comments ) && count( $comments ) ? $comments[0] : 0;
73 + }
74 +
75 + $duplicated_id = null;
76 +
77 + /**
78 + * Core comment creation function doesn't return the duplicated comment ID.
79 + * Add a filter to get the ID.
80 + *
81 + * phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
82 + */
83 + $get_id_func = function ( $dupe_id, $commentdata ) use ( &$duplicated_id ) {
84 + if ( $dupe_id !== null ) {
85 + $duplicated_id = $dupe_id;
86 + }
87 +
88 + return $dupe_id;
89 + };
90 +
91 + // Add the filter.
92 + \add_filter( 'duplicate_comment_id', $get_id_func, 10, 2 );
93 +
94 + $response = parent::create_item( $request );
95 +
96 + // Check if the comment is duplicated.
97 + if (
98 + $duplicated_id !== null &&
99 + is_wp_error( $response ) &&
100 + $response->get_error_code() === 'comment_duplicate' ) {
101 + $data = $response->get_error_data( 'comment_duplicate' );
102 +
103 + // Add the comment ID.
104 + $data['comment_id'] = $duplicated_id;
105 +
106 + $response->add_data( $data );
107 + }
108 +
109 + // Remove the filter.
110 + \remove_filter( 'duplicate_comment_id', $get_id_func );
111 +
112 + return $this->add_import_id_metadata( $request, $response );
113 + }
114 +}