← 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 | } |