PluginProbe
Hostinger Tools / 3.0.76
Hostinger Tools v3.0.76
3.0.77 3.0.76 3.0.75 3.0.74 3.0.73 3.0.72 3.0.71 3.0.70 3.0.69 3.0.68 3.0.67 3.0.66 1.8.1 1.8.2 1.8.3 1.9.1 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.4 All 108 releases
hostinger / includes / Admin / Jobs / AbstractBatchedJob.php

AbstractBatchedJob.php in Hostinger Tools 3.0.76, at includes/Admin/Jobs/AbstractBatchedJob.php

75 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Hostinger\Admin\Jobs;
4
5 use Hostinger\LlmsTxtGenerator\LlmsTxtParser;
6
7 defined( 'ABSPATH' ) || exit;
8
9 abstract class AbstractBatchedJob extends AbstractJob {
10
11 public function init(): void {
12 add_action( $this->get_create_batch_hook(), array( $this, 'handle_create_batch_action' ), 10, 2 );
13 parent::init();
14 }
15
16 protected function get_create_batch_hook(): string {
17 return "{$this->get_hook_base_name()}create_batch";
18 }
19
20 public function schedule( array $args = array() ): void {
21 $this->schedule_create_batch_action( 1, $args );
22 }
23
24 public function handle_create_batch_action( int $batch_number, array $args ): void {
25 $items = $this->get_batch( $batch_number, $args );
26
27 if ( empty( $items ) ) {
28 $this->handle_complete( $batch_number, $args );
29 } else {
30 $this->schedule_process_action( $items, $args );
31 $this->schedule_create_batch_action( $batch_number + 1, $args );
32 }
33 }
34
35 protected function get_batch_size(): int {
36 return apply_filters( 'hostinger_batch_item_limit', LlmsTxtParser::DEFAULT_LIMIT );
37 }
38
39 protected function get_query_offset( int $batch_number ): int {
40 return $this->get_batch_size() * ( $batch_number - 1 );
41 }
42
43 protected function schedule_create_batch_action( int $batch_number, array $args ): void {
44 if ( $this->can_schedule( array( $batch_number ) ) ) {
45 $this->action_scheduler->schedule_immediate(
46 $this->get_create_batch_hook(),
47 array(
48 $batch_number,
49 $args,
50 )
51 );
52 }
53 }
54
55 protected function schedule_process_action( array $items = array(), array $args = array() ): void {
56 $job_data = array(
57 'items' => $items,
58 'args' => $args,
59 );
60 if ( ! $this->is_processing( $job_data ) ) {
61 $this->action_scheduler->schedule_immediate( $this->get_process_item_hook(), array( $job_data ) );
62 }
63 }
64
65 protected function is_processing( array $args = array() ): bool {
66 return $this->action_scheduler->has_scheduled_action( $this->get_process_item_hook(), array( $args ) );
67 }
68
69 protected function handle_complete( int $final_batch_number, array $args ): void {
70 return;
71 }
72
73 abstract protected function get_batch( int $batch_number, array $args ): array;
74 }
75