98 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Background Process for Image Processing Queue
 | |
|  *
 | |
|  * @package Image-Processing-Queue
 | |
|  */
 | |
| 
 | |
| if ( ! class_exists( 'IPQ_Process' ) ) {
 | |
| 
 | |
| 	/**
 | |
| 	 * Custom exception class for IPQ background processing
 | |
| 	 */
 | |
| 	class IPQ_Process_Exception extends Exception {}
 | |
| 
 | |
| 	/**
 | |
| 	 * Extends the background processing library and implements image processing routines
 | |
| 	 */
 | |
| 	class IPQ_Process extends WP_Background_Process {
 | |
| 		/**
 | |
| 		 * Action
 | |
| 		 *
 | |
| 		 * @var string
 | |
| 		 */
 | |
| 		protected $action = 'image_processing_queue';
 | |
| 
 | |
| 		/**
 | |
| 		 * Background task to resizes images
 | |
| 		 *
 | |
| 		 * @param mixed $item Image data.
 | |
| 		 * @return bool
 | |
| 		 * @throws IPQ_Process_Exception On error.
 | |
| 		 */
 | |
| 		protected function task( $item ) {
 | |
| 			$defaults = array(
 | |
| 				'post_id' => 0,
 | |
| 				'width' => 0,
 | |
| 				'height' => 0,
 | |
| 				'crop' => false,
 | |
| 			);
 | |
| 			$item = wp_parse_args( $item, $defaults );
 | |
| 
 | |
| 			$post_id = $item['post_id'];
 | |
| 			$width = $item['width'];
 | |
| 			$height = $item['height'];
 | |
| 			$crop = $item['crop'];
 | |
| 
 | |
| 			if ( ! $width && ! $height ) {
 | |
| 				throw new IPQ_Process_Exception( "Invalid dimensions '{$width}x{$height}'" );
 | |
| 			}
 | |
| 
 | |
| 			if ( Image_Processing_Queue::does_size_already_exist_for_image( $post_id, array( $width, $height, $crop ) ) ) {
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			$image_meta = Image_Processing_Queue::get_image_meta( $post_id );
 | |
| 
 | |
| 			if ( ! $image_meta ) {
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			add_filter( 'as3cf_get_attached_file_copy_back_to_local', '__return_true' );
 | |
| 			$img_path = Image_Processing_Queue::get_image_path( $post_id );
 | |
| 
 | |
| 			if ( ! $img_path ) {
 | |
| 				return false;
 | |
| 			}
 | |
| 
 | |
| 			$editor = wp_get_image_editor( $img_path );
 | |
| 
 | |
| 			if ( is_wp_error( $editor ) ) {
 | |
| 				throw new IPQ_Process_Exception( 'Unable to get WP_Image_Editor for file "' . $img_path . '": ' . $editor->get_error_message() . ' (is GD or ImageMagick installed?)' );
 | |
| 			}
 | |
| 
 | |
| 			if ( is_wp_error( $editor->resize( $width, $height, $crop ) ) ) {
 | |
| 				throw new IPQ_Process_Exception( 'Error resizing image: ' . $editor->get_error_message() );
 | |
| 			}
 | |
| 
 | |
| 			$resized_file = $editor->save();
 | |
| 
 | |
| 			if ( is_wp_error( $resized_file ) ) {
 | |
| 				throw new IPQ_Process_Exception( 'Unable to save resized image file: ' . $editor->get_error_message() );
 | |
| 			}
 | |
| 
 | |
| 			$size_name = Image_Processing_Queue::get_size_name( array( $width, $height, $crop ) );
 | |
| 			$image_meta['sizes'][ $size_name ] = array(
 | |
| 				'file'      => $resized_file['file'],
 | |
| 				'width'     => $resized_file['width'],
 | |
| 				'height'    => $resized_file['height'],
 | |
| 				'mime-type' => $resized_file['mime-type'],
 | |
| 			);
 | |
| 			wp_update_attachment_metadata( $post_id, $image_meta );
 | |
| 
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 |