Jake Vanderwerf
7 days ago 46d681c6b825d21b3f698d793c4e630c687d90ad
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
<?php
namespace JVBase\managers\queue;
if (!defined('ABSPATH')) {
    exit;
}
final class FilteredExecutor implements Executor
{
    public function execute(Operation $operation, Progress $progress): Result
    {
        // Process whatever data is passed (Processor handles chunking)
        $filterResult = $this->callFilter($operation, $operation->requestData);
 
        $progress->advance($operation->totalItems);
 
        return new Result(
            outcome: $filterResult['success'] ? 'success' : 'failed',
            result: $filterResult['result'] ?? null
        );
    }
 
    private function callFilter(Operation $operation, array $data): array
    {
        $filterResult = apply_filters(
            BASE . 'handle_bulk_operation',
            ['success' => false, 'message' => 'No handler for: ' . $operation->type],
            (object) [
                'id'      => $operation->id,
                'type'    => $operation->type,
                'user_id' => $operation->userId,
            ],
            $data
        );
 
        // Normalize WP_Error
        if (is_wp_error($filterResult)) {
            return [
                'success' => false,
                'message' => $filterResult->get_error_message(),
            ];
        }
 
        // Ensure expected format
        if (!is_array($filterResult) || !isset($filterResult['success'])) {
            return [
                'success' => false,
                'message' => 'Invalid handler response',
            ];
        }
 
        return $filterResult;
    }
}