Passed
Branch feature/2.0 (ef99fd)
by Jonathan
11:25
created

TaskTrigger::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 4
rs 10
1
<?php
2
3
/**
4
 * webtrees-lib: MyArtJaub library for webtrees
5
 *
6
 * @package MyArtJaub\Webtrees
7
 * @subpackage AdminTasks
8
 * @author Jonathan Jaubart <[email protected]>
9
 * @copyright Copyright (c) 2012-2020, Jonathan Jaubart
10
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3
11
 */
12
13
declare(strict_types=1);
14
15
namespace MyArtJaub\Webtrees\Module\AdminTasks\Http\RequestHandlers;
16
17
use Fisharebest\Webtrees\I18N;
18
use Fisharebest\Webtrees\Exceptions\HttpNotFoundException;
19
use Fisharebest\Webtrees\Services\ModuleService;
20
use MyArtJaub\Webtrees\Module\AdminTasks\AdminTasksModule;
21
use MyArtJaub\Webtrees\Module\AdminTasks\Model\TaskInterface;
22
use MyArtJaub\Webtrees\Module\AdminTasks\Services\TaskScheduleService;
23
use Psr\Http\Message\ResponseInterface;
24
use Psr\Http\Message\ServerRequestInterface;
25
use Psr\Http\Server\RequestHandlerInterface;
26
27
/**
28
 * Request handler for triggering task schedules
29
 */
30
class TaskTrigger implements RequestHandlerInterface
31
{
32
    /**
33
     * @var AdminTasksModule $module
34
     */
35
    private $module;
36
    
37
    /**
38
     * @var TaskScheduleService $taskschedules_service
39
     */
40
    private $taskschedules_service;
41
    
42
    /**
43
     * Constructor for TaskTrigger request handler
44
     * @param ModuleService $module_service
45
     * @param TaskScheduleService $taskschedules_service
46
     */
47
    public function __construct(ModuleService $module_service, TaskScheduleService $taskschedules_service)
48
    {
49
        $this->module = $module_service->findByInterface(AdminTasksModule::class)->first();
50
        $this->taskschedules_service = $taskschedules_service;
51
    }
52
53
    /**
54
     * {@inheritDoc}
55
     * @see \Psr\Http\Server\RequestHandlerInterface::handle()
56
     */
57
    public function handle(ServerRequestInterface $request): ResponseInterface
58
    {
59
        if ($this->module === null) {
60
            throw new HttpNotFoundException(I18N::translate('The attached module could not be found.'));
61
        }
62
        
63
        $task_id = $request->getAttribute('task');
64
        $token = $this->module->getPreference('MAJ_AT_FORCE_EXEC_TOKEN');
65
        $force_token = $request->getQueryParams()['force'] ?? '';
66
        $force = $token == $force_token;
67
        
68
        $task_schedules = $this->taskschedules_service->findTasksToRun($force, $task_id);
69
        
70
        foreach ($task_schedules as $task_schedule) {
71
            $this->taskschedules_service->run($task_schedule, $force);
72
        }
73
        
74
        return response();
75
    }
76
}
77