118 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Smush integration with Rest API: Rest class
 | |
|  *
 | |
|  * @package Smush\Core
 | |
|  * @since 2.8.0
 | |
|  *
 | |
|  * @author Anton Vanyukov <anton@incsub.com>
 | |
|  *
 | |
|  * @copyright (c) 2018, Incsub (http://incsub.com)
 | |
|  */
 | |
| 
 | |
| namespace Smush\Core;
 | |
| 
 | |
| use WP_Smush;
 | |
| 
 | |
| if ( ! defined( 'WPINC' ) ) {
 | |
| 	die;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Singleton class Rest for extending the WordPress REST API interface.
 | |
|  *
 | |
|  * @since 2.8.0
 | |
|  */
 | |
| class Rest {
 | |
| 
 | |
| 	/**
 | |
| 	 * Rest constructor.
 | |
| 	 */
 | |
| 	public function __construct() {
 | |
| 		// Register smush meta fields and callbacks for the image object in the
 | |
| 		// wp-json/wp/v2/media REST API endpoint.
 | |
| 		add_action( 'rest_api_init', array( $this, 'register_smush_meta' ) );
 | |
| 
 | |
| 		// Custom route for handling configs.
 | |
| 		add_action( 'rest_api_init', array( $this, 'register_configs_route' ) );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Callback for rest_api_init action.
 | |
| 	 *
 | |
| 	 * @since 2.8.0
 | |
| 	 */
 | |
| 	public function register_smush_meta() {
 | |
| 		register_rest_field(
 | |
| 			'attachment',
 | |
| 			'smush',
 | |
| 			array(
 | |
| 				'get_callback' => array( $this, 'register_image_stats' ),
 | |
| 				'schema'       => array(
 | |
| 					'description' => __( 'Smush data.', 'wp-smushit' ),
 | |
| 					'type'        => 'string',
 | |
| 				),
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Add image stats to the wp-json/wp/v2/media REST API endpoint.
 | |
| 	 *
 | |
| 	 * Will add the stats from wp-smpro-smush-data image meta key to the media REST API endpoint.
 | |
| 	 * If image is Smushed, the stats from the meta can be queried, if the not - the status of Smushing
 | |
| 	 * will be displayed as a string in the API.
 | |
| 	 *
 | |
| 	 * @since 2.8.0
 | |
| 	 *
 | |
| 	 * @link https://developer.wordpress.org/rest-api/reference/media/
 | |
| 	 *
 | |
| 	 * @param array $image  Image array.
 | |
| 	 *
 | |
| 	 * @return array|string
 | |
| 	 */
 | |
| 	public function register_image_stats( $image ) {
 | |
| 		if ( get_transient( 'smush-in-progress-' . $image['id'] ) ) {
 | |
| 			return __( 'Smushing in progress', 'wp-smushit' );
 | |
| 		}
 | |
| 
 | |
| 		$wp_smush_data = get_post_meta( $image['id'], Modules\Smush::$smushed_meta_key, true );
 | |
| 
 | |
| 		if ( empty( $wp_smush_data ) ) {
 | |
| 			return __( 'Not processed', 'wp-smushit' );
 | |
| 		}
 | |
| 
 | |
| 		$wp_resize_savings  = get_post_meta( $image['id'], 'wp-smush-resize_savings', true );
 | |
| 		$conversion_savings = get_post_meta( $image['id'], 'wp-smush-pngjpg_savings', true );
 | |
| 
 | |
| 		$combined_stats = WP_Smush::get_instance()->core()->combined_stats( $wp_smush_data, $wp_resize_savings );
 | |
| 
 | |
| 		return WP_Smush::get_instance()->core()->combine_conversion_stats( $combined_stats, $conversion_savings );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Registers the custom route for handling configs.
 | |
| 	 *
 | |
| 	 * @since 3.8.6
 | |
| 	 */
 | |
| 	public function register_configs_route() {
 | |
| 		$configs_handler = new Configs();
 | |
| 		register_rest_route(
 | |
| 			'wp-smush/v1',
 | |
| 			'/preset_configs/',
 | |
| 			array(
 | |
| 				array(
 | |
| 					'methods'             => 'GET',
 | |
| 					'callback'            => array( $configs_handler, 'get_callback' ),
 | |
| 					'permission_callback' => array( $configs_handler, 'permission_callback' ),
 | |
| 				),
 | |
| 				array(
 | |
| 					'methods'             => 'POST',
 | |
| 					'callback'            => array( $configs_handler, 'post_callback' ),
 | |
| 					'permission_callback' => array( $configs_handler, 'permission_callback' ),
 | |
| 				),
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| }
 |