<?php
namespace ImageOptimization\Modules\Stats\Classes;
use ImageOptimization\Classes\Async_Operation\{
Async_Operation,
Async_Operation_Hook,
Queries\Operation_Query,
};
use ImageOptimization\Classes\Image\Image_Query_Builder;
use ImageOptimization\Modules\Optimization\Classes\Bulk_Optimization\{
Bulk_Optimization_Queue,
Bulk_Optimization_Queue_Status,
Bulk_Optimization_Queue_Type
};
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
class Stats {
public static function calculate_global_stats(): array {
$bulk_optimization_operation_status = self::get_bulk_optimization_status();
return [
'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:
default:
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 )
->set_status( [
Async_Operation::OPERATION_STATUS_PENDING,
Async_Operation::OPERATION_STATUS_RUNNING,
] )
->set_limit( 1 );
$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 )
->set_status( [
Async_Operation::OPERATION_STATUS_PENDING,
Async_Operation::OPERATION_STATUS_RUNNING,
] )
->set_limit( 1 );
$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() )
->set_paging_size( 1 )
->return_images_only_with_backups()
->execute();
return $query->post_count > 0;
}
}