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-attachment.php +33 -17 12.2.3 → 16.3 View file →
@@ -6,8 +6,16 @@
6 6 */
7 7
8 8 namespace Automattic\Jetpack\Import\Endpoints;
9 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 +
10 18 /**
11 19 * Class Attachment
12 20 */
13 21 class Attachment extends \WP_REST_Attachments_Controller {
@@ -100,8 +108,10 @@
100 108 * @param WP_REST_Request $request Full details about the request.
101 109 * @return WP_REST_Response|WP_Error Response object on success, WP_Error object on failure.
102 110 */
103 111 public function create_item( $request ) {
112 + // Set the WP_IMPORTING constant to prevent sync notifications
113 + $this->set_importing();
104 114 $file_info = $this->get_file_info( $request );
105 115 $attachment = $this->get_attachment_by_file_info( $file_info );
106 116 if ( $attachment ) {
107 117 $response = $this->prepare_attachment_for_response( $attachment, $request );
@@ -109,9 +119,9 @@
109 119 if ( \is_wp_error( $response ) ) {
110 120 return $response;
111 121 }
112 122
113 - return new \WP_Error(
123 + return new WP_Error(
114 124 'attachment_exists',
115 125 __( 'The attachment already exists.', 'jetpack-import' ),
116 126 array(
117 127 'status' => 409,
@@ -121,8 +131,10 @@
121 131 );
122 132 }
123 133
124 134 $this->set_upload_dir( $request );
135 + // Disable scaled image generation.
136 + add_filter( 'big_image_size_threshold', '__return_false' );
125 137 return parent::create_item( $request );
126 138 }
127 139
128 140 /**
@@ -175,9 +187,9 @@
175 187
176 188 /**
177 189 * Add a filter that rewrites the upload path.
178 190 *
179 - * @param \WP_REST_Request $request Full details about the request.
191 + * @param WP_REST_Request $request Full details about the request.
180 192 *
181 193 * @return void
182 194 * @throws \Exception If the date is invalid.
183 195 */
@@ -204,9 +216,9 @@
204 216 /**
205 217 * Prepares a single attachment for create or update. This function overrides the parent function
206 218 *
207 219 * @param WP_REST_Request $request Request object.
208 - * @return stdClass|WP_Error Post object.
220 + * @return \stdClass|WP_Error Post object.
209 221 */
210 222 protected function prepare_item_for_database( $request ) {
211 223 $prepared_attachment = parent::prepare_item_for_database( $request );
212 224 // date_gmt is equal to the date by default, so we need to override it.
@@ -252,16 +264,20 @@
252 264 * @return mixed An associative array containing metadata for the attachment, or false if no attachment was found.
253 265 */
254 266 protected function get_attachment_by_file_info( $fileinfo ) {
255 267 // Make sure all required variables are set and not empty
256 - if ( empty( $fileinfo['filename'] ) || empty( $fileinfo['mime_type'] ) || empty( $fileinfo['post_date_gmt'] ) ) {
268 + if ( empty( $fileinfo['filename'] ) || empty( $fileinfo['mime_type'] ) ) {
257 269 return false;
258 270 }
271 + $original_filename = $fileinfo['filename'];
272 + $mime_type = $fileinfo['mime_type'];
273 + $post_date_gmt = $fileinfo['post_date_gmt'];
274 + // From WordPress 5.3, we introduced the scaled image feature, so we'll also need to check for the scaled filename.
275 + // https://make.wordpress.org/core/2019/10/09/introducing-handling-of-big-images-in-wordpress-5-3/
276 + $extension_pos = strrpos( $original_filename, '.' );
277 + $scaled_filename = substr( $original_filename, 0, $extension_pos ) . '-scaled' . substr( $original_filename, $extension_pos );
278 + $filename_check_array = array( $original_filename, $scaled_filename );
259 279
260 - $filename = $fileinfo['filename'];
261 - $mime_type = $fileinfo['mime_type'];
262 - $post_date_gmt = $fileinfo['post_date_gmt'];
263 -
264 280 $args = array(
265 281 'post_type' => 'attachment',
266 282 'post_mime_type' => $mime_type,
267 283 'date_query' => array(
@@ -271,18 +287,20 @@
271 287 'inclusive' => true,
272 288 'column' => 'post_date_gmt',
273 289 ),
274 290 ),
275 - 'meta_query' => array(
276 - array(
277 - 'key' => '_wp_attached_file',
278 - 'value' => preg_quote( $filename, '/' ),
279 - 'compare' => 'REGEXP',
280 - ),
281 - ),
282 291 'posts_per_page' => 1,
283 292 );
284 293
294 + $args['meta_query'] = array( 'relation' => 'OR' );
295 + foreach ( $filename_check_array as $filename ) {
296 + $args['meta_query'][] = array(
297 + 'key' => '_wp_attached_file',
298 + 'value' => preg_quote( $filename, '/' ),
299 + 'compare' => 'REGEXP',
300 + );
301 + }
302 +
285 303 $attachments = \get_posts( $args );
286 304
287 305 if ( ! empty( $attachments ) ) {
288 306 // Return the first attachment data found
@@ -287,9 +305,8 @@
287 305 if ( ! empty( $attachments ) ) {
288 306 // Return the first attachment data found
289 307 return $attachments[0];
290 308 }
291 -
292 309 return false;
293 310 }
294 311
295 312 /**
@@ -310,6 +327,5 @@
310 327 }
311 328
312 329 return (array) $response->get_data();
313 330 }
314 -
315 331 }