namespace ImageOptimization\Modules\Stats\Classes;
use ImageOptimization\Classes\Async_Operation\{
use ImageOptimization\Classes\Image\Image_Query_Builder;
use ImageOptimization\Modules\Optimization\Classes\Bulk_Optimization\{
Bulk_Optimization_Queue_Status,
Bulk_Optimization_Queue_Type
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
public static function calculate_global_stats(): array {
$bulk_optimization_operation_status = self::get_bulk_optimization_status();
'optimization_stats' => Optimization_Stats::get_image_stats(),
'bulk_optimization_status' => $bulk_optimization_operation_status,
'bulk_restoring_status' => self::get_bulk_restoring_status(),
'bulk_backup_removing_status' => self::get_bulk_backup_removing_status(),
'backups_exist' => self::backups_exist(),
private static function get_bulk_optimization_status(): string {
$queue = new Bulk_Optimization_Queue( Bulk_Optimization_Queue_Type::OPTIMIZATION );
if ( ! $queue->exists() ) {
return Async_Operation::OPERATION_STATUS_NOT_STARTED;
$queue_status = $queue->get_status();
switch ( $queue_status ) {
case Bulk_Optimization_Queue_Status::PROCESSING:
case Bulk_Optimization_Queue_Status::PENDING:
return Async_Operation::OPERATION_STATUS_RUNNING;
case Bulk_Optimization_Queue_Status::CANCELLED:
return Async_Operation::OPERATION_STATUS_CANCELED;
case Bulk_Optimization_Queue_Status::COMPLETED:
case Bulk_Optimization_Queue_Status::FAILED:
return Async_Operation::OPERATION_STATUS_NOT_STARTED;
private static function get_bulk_restoring_status(): string {
$active_query = ( new Operation_Query() )
->set_hook( Async_Operation_Hook::RESTORE_MANY_IMAGES )
Async_Operation::OPERATION_STATUS_PENDING,
Async_Operation::OPERATION_STATUS_RUNNING,
$active_operations = Async_Operation::get( $active_query );
return ! empty( $active_operations )
? Async_Operation::OPERATION_STATUS_RUNNING
: Async_Operation::OPERATION_STATUS_NOT_STARTED;
private static function get_bulk_backup_removing_status(): string {
$active_query = ( new Operation_Query() )
->set_hook( Async_Operation_Hook::REMOVE_MANY_BACKUPS )
Async_Operation::OPERATION_STATUS_PENDING,
Async_Operation::OPERATION_STATUS_RUNNING,
$active_operations = Async_Operation::get( $active_query );
return ! empty( $active_operations )
? Async_Operation::OPERATION_STATUS_RUNNING
: Async_Operation::OPERATION_STATUS_NOT_STARTED;
private static function backups_exist(): bool {
$query = ( new Image_Query_Builder() )
->return_images_only_with_backups()
return $query->post_count > 0;