oont-contents/plugins/jetpack-boost/app/modules/image-size-analysis/data-sync/class-image-size-analysis-entry.php
2025-04-06 08:34:48 +02:00

124 lines
3.6 KiB
PHP

<?php
namespace Automattic\Jetpack_Boost\Modules\Image_Size_Analysis\Data_Sync;
use Automattic\Jetpack\Boost_Core\Lib\Boost_API;
use Automattic\Jetpack\WP_JS_Data_Sync\Contracts\Entry_Can_Get;
use Automattic\Jetpack\WP_JS_Data_Sync\Contracts\Lazy_Entry;
use Automattic\Jetpack_Boost\Lib\Critical_CSS\Source_Providers\Source_Providers;
use Automattic\Jetpack_Boost\Modules\Image_Size_Analysis\Image_Size_Analysis_Fixer;
class Image_Size_Analysis_Entry implements Lazy_Entry, Entry_Can_Get {
public function get( $page = 1, $group = 'all' ) {
$report_id = defined( 'JETPACK_BOOST_FORCE_REPORT_ID' ) ? JETPACK_BOOST_FORCE_REPORT_ID : 'latest';
$data = Boost_API::get(
'image-guide/reports/' . $report_id . '/issues',
array(
'page' => $page,
'group' => sanitize_title( wp_unslash( $group ) ),
'per_page' => 20,
)
);
$issues = array();
foreach ( $data['issues'] as $issue ) {
$page_provider = $this->get_page( $issue );
$image = $this->get_image_info( $issue );
if ( empty( $page_provider['edit_url'] ) ) { // archive or front page
$image['fixed'] = false;
} else {
$post_id = Image_Size_Analysis_Fixer::get_post_id( $page_provider['edit_url'] );
$image['fixed'] = Image_Size_Analysis_Fixer::is_fixed( $post_id, $image['url'] );
}
$issues[] = array(
'id' => $issue['id'],
'thumbnail' => $issue['url'],
'device_type' => $issue['device'],
'type' => $issue['type'],
'status' => $issue['status'],
'instructions' => $this->get_instructions( $issue ),
'page' => $page_provider,
'image' => $image,
);
}
return array(
'last_updated' => strtotime( $data['last_updated'] ) * 1000,
'total_pages' => $data['pagination']['total_pages'],
'images' => $issues,
);
}
/**
* Get the page info for a given key
*
* @todo: Implement
*/
private function get_page( $issue ) {
$key = $issue['page_provider'];
$provider = $this->get_provider( $key );
$title = empty( $provider ) ? $key : $provider::describe_key( $key );
$edit_url = empty( $provider ) ? null : $provider::get_edit_url( $key );
if ( empty( $title ) ) {
$title = $issue['page_provider'];
}
return array(
'id' => $issue['page_id'],
'url' => $issue['page_url'],
'edit_url' => $edit_url ? $edit_url : null,
'title' => $title,
);
}
/**
* Generate instructions for an issue.
*/
private function get_instructions( $_issue ) {
return __( 'Resize the image to the expected dimensions and compress it.', 'jetpack-boost' );
}
/**
* Get the image info for a given issue
*
* @todo: Implement
*/
private function get_image_info( $issue ) {
return array(
'url' => $issue['url'],
'dimensions' => array(
'file' => array(
'width' => $issue['meta']['fileSize_width'],
'height' => $issue['meta']['fileSize_height'],
),
'expected' => array(
'width' => $issue['meta']['expectedSize_width'],
'height' => $issue['meta']['expectedSize_height'],
),
'size_on_screen' => array(
'width' => $issue['meta']['sizeOnPage_width'],
'height' => $issue['meta']['sizeOnPage_height'],
),
),
'weight' => array(
'current' => $issue['meta']['fileSize_weight'],
'potential' => (int) $issue['meta']['potentialSavings'],
),
);
}
/**
* Get a provider for a given key.
*/
private function get_provider( $key ) {
static $providers = null;
if ( null === $providers ) {
$providers = new Source_Providers();
}
return $providers->get_provider_for_key( $key );
}
}