BackgroundTaskLoader.php
2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
namespace WPML\BackgroundTask;
use WPML\Collect\Support\Collection;
use WPML\Core\BackgroundTask\Command\UpdateBackgroundTask;
use WPML\Core\BackgroundTask\Repository\BackgroundTaskRepository;
use WPML\Core\WP\App\Resources;
use WPML\FP\Either;
use WPML\FP\Fns;
use WPML\FP\Lst;
use WPML\LIB\WP\Hooks;
class BackgroundTaskLoader implements \IWPML_Backend_Action, \IWPML_DIC_Action {
/** @var UpdateBackgroundTask $updateBackgroundTaskCommand */
private $updateBackgroundTaskCommand;
/** @var BackgroundTaskRepository $backgroundTaskRepository */
private $backgroundTaskRepository;
/**
* @param UpdateBackgroundTask $updateBackgroundTaskCommand
* @param BackgroundTaskRepository $backgroundTaskRepository
*/
public function __construct(
UpdateBackgroundTask $updateBackgroundTaskCommand,
BackgroundTaskRepository $backgroundTaskRepository
) {
$this->updateBackgroundTaskCommand = $updateBackgroundTaskCommand;
$this->backgroundTaskRepository = $backgroundTaskRepository;
}
public function add_hooks() {
Hooks::onAction( 'wp_loaded' )
->then( function() {
$tasks = $this->getSerializedTasks();
Resources::enqueueGlobalVariable('wpml_background_tasks', [
/** @phpstan-ignore-next-line */
'endpoints' => array_merge( Lst::pluck('taskType', $tasks), [ BackgroundTaskLoader::class ] ),
'tasks' => $tasks,
] );
} );
}
/**
* @param \WPML\Collect\Support\Collection $data
*/
public function run(
Collection $data
) {
$taskId = $data['taskId'];
$cmd = $data['cmd'];
$task = $this->backgroundTaskRepository->getByTaskId( $taskId );
if ( 'stop' === $cmd ) {
$this->updateBackgroundTaskCommand->runStop( $task );
} elseif ( 'pause' === $cmd ) {
$this->updateBackgroundTaskCommand->saveStatusPaused( $task );
} elseif ( 'resume' === $cmd ) {
$this->updateBackgroundTaskCommand->saveStatusResumed( $task );
} elseif ( 'restart' === $cmd ) {
$this->updateBackgroundTaskCommand->saveStatusRestart( $task );
}
$taskData = BackgroundTaskViewModel::get( $task );
return Either::of( $taskData );
}
/**
* @return array
*/
public function getSerializedTasks() {
return Fns::map(
function( $task ) {
return BackgroundTaskViewModel::get( $task, true );
},
$this->backgroundTaskRepository->getAllRunnableTasks()
);
}
}