Passed
Push — feature/code-analysis ( e964aa...4fe35d )
by Jonathan
14:33
created

AdminTasksModule   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 122
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 41
dl 0
loc 122
rs 10
c 0
b 0
f 0
wmc 8

8 Methods

Rating   Name   Duplication   Size   Complexity  
A boot() 0 7 1
A customModuleVersion() 0 3 1
A description() 0 3 1
A title() 0 3 1
A listTasks() 0 4 1
A bodyContent() 0 3 1
A getConfigLink() 0 3 1
A loadRoutes() 0 30 1
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-2022, 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;
16
17
use Aura\Router\Map;
18
use Fig\Http\Message\RequestMethodInterface;
19
use Fisharebest\Webtrees\I18N;
20
use Fisharebest\Webtrees\Http\Middleware\AuthAdministrator;
21
use Fisharebest\Webtrees\Module\AbstractModule;
22
use Fisharebest\Webtrees\Module\ModuleConfigInterface;
23
use Fisharebest\Webtrees\Module\ModuleConfigTrait;
24
use Fisharebest\Webtrees\Module\ModuleGlobalInterface;
25
use Fisharebest\Webtrees\Module\ModuleGlobalTrait;
26
use Fisharebest\Webtrees\Services\MigrationService;
27
use MyArtJaub\Webtrees\Contracts\Tasks\ModuleTasksProviderInterface;
28
use MyArtJaub\Webtrees\Module\ModuleMyArtJaubInterface;
29
use MyArtJaub\Webtrees\Module\ModuleMyArtJaubTrait;
30
use MyArtJaub\Webtrees\Module\AdminTasks\Http\RequestHandlers\AdminConfigPage;
31
use MyArtJaub\Webtrees\Module\AdminTasks\Http\RequestHandlers\TaskEditAction;
32
use MyArtJaub\Webtrees\Module\AdminTasks\Http\RequestHandlers\TaskEditPage;
33
use MyArtJaub\Webtrees\Module\AdminTasks\Http\RequestHandlers\TaskStatusAction;
34
use MyArtJaub\Webtrees\Module\AdminTasks\Http\RequestHandlers\TaskTrigger;
35
use MyArtJaub\Webtrees\Module\AdminTasks\Http\RequestHandlers\TasksList;
36
use MyArtJaub\Webtrees\Module\AdminTasks\Http\RequestHandlers\TokenGenerate;
37
use MyArtJaub\Webtrees\Module\AdminTasks\Tasks\HealthCheckEmailTask;
38
39
/**
40
 * MyArtJaub AdminTask Module
41
 * Allow for tasks to be run on a (nearly-)regular schedule
42
 */
43
class AdminTasksModule extends AbstractModule implements
44
    ModuleMyArtJaubInterface,
45
    ModuleConfigInterface,
46
    ModuleGlobalInterface,
47
    ModuleTasksProviderInterface
48
{
49
    use ModuleMyArtJaubTrait {
50
        boot as traitBoot;
51
    }
52
    use ModuleConfigTrait;
53
    use ModuleGlobalTrait;
54
55
    //How to update the database schema for this module
56
    private const SCHEMA_TARGET_VERSION   = 2;
57
    private const SCHEMA_SETTING_NAME     = 'MAJ_ADMTASKS_SCHEMA_VERSION';
58
    private const SCHEMA_MIGRATION_PREFIX = __NAMESPACE__ . '\Schema';
59
60
    /**
61
     * {@inheritDoc}
62
     * @see \Fisharebest\Webtrees\Module\AbstractModule::title()
63
     */
64
    public function title(): string
65
    {
66
        return I18N::translate('Administration Tasks');
67
    }
68
69
    /**
70
     * {@inheritDoc}
71
     * @see \Fisharebest\Webtrees\Module\AbstractModule::description()
72
     */
73
    public function description(): string
74
    {
75
        return I18N::translate('Manage and run nearly-scheduled administration tasks.');
76
    }
77
78
    /**
79
     * {@inheritDoc}
80
     * @see \Fisharebest\Webtrees\Module\AbstractModule::boot()
81
     */
82
    public function boot(): void
83
    {
84
        $this->traitBoot();
85
        app(MigrationService::class)->updateSchema(
86
            self::SCHEMA_MIGRATION_PREFIX,
87
            self::SCHEMA_SETTING_NAME,
88
            self::SCHEMA_TARGET_VERSION
89
        );
90
    }
91
92
    /**
93
     * {@inheritDoc}
94
     * @see \MyArtJaub\Webtrees\Module\ModuleMyArtJaubInterface::loadRoutes()
95
     */
96
    public function loadRoutes(Map $router): void
97
    {
98
        $router->attach('', '', static function (Map $router): void {
99
100
            $router->attach('', '/module-maj/admintasks', static function (Map $router): void {
101
                $router->tokens(['enable' => '[01]']);
102
103
                $router->attach('', '/admin', static function (Map $router): void {
104
105
                    $router->extras([
106
                        'middleware' => [
107
                            AuthAdministrator::class,
108
                        ],
109
                    ]);
110
                    $router->get(AdminConfigPage::class, '/config', AdminConfigPage::class);
111
112
                    $router->attach('', '/tasks', static function (Map $router): void {
113
114
                        $router->get(TasksList::class, '', TasksList::class);
115
                        $router->get(TaskEditPage::class, '/{task}', TaskEditPage::class);
116
                        $router->post(TaskEditAction::class, '/{task}', TaskEditAction::class);
117
                        $router->get(TaskStatusAction::class, '/{task}/status/{enable}', TaskStatusAction::class);
118
                    });
119
                });
120
121
                $router->get(TaskTrigger::class, '/trigger{/task}', TaskTrigger::class)
122
                    ->allows(RequestMethodInterface::METHOD_POST);
123
124
                $router->post(TokenGenerate::class, '/token', TokenGenerate::class)
125
                    ->extras(['middleware' => [AuthAdministrator::class]]);
126
            });
127
        });
128
    }
129
130
    /**
131
     * {@inheritDoc}
132
     * @see \Fisharebest\Webtrees\Module\ModuleCustomInterface::customModuleLatestVersion()
133
     */
134
    public function customModuleVersion(): string
135
    {
136
        return '2.1.1-v.1';
137
    }
138
139
    /**
140
     * {@inheritDoc}
141
     * @see \Fisharebest\Webtrees\Module\ModuleConfigInterface::getConfigLink()
142
     */
143
    public function getConfigLink(): string
144
    {
145
        return route(AdminConfigPage::class);
146
    }
147
148
    /**
149
     * {@inheritDoc}
150
     * @see \Fisharebest\Webtrees\Module\ModuleGlobalInterface::bodyContent()
151
     */
152
    public function bodyContent(): string
153
    {
154
        return view($this->name() . '::snippet', [ 'url' => route(TaskTrigger::class) ]);
155
    }
156
157
    /**
158
     * {@inheritDoc}
159
     * @see ModuleTasksProviderInterface::listTasks()
160
     */
161
    public function listTasks(): array
162
    {
163
        return [
164
            'maj-healthcheck' => HealthCheckEmailTask::class
165
        ];
166
    }
167
}
168