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

MapAdapterDeleteInvalidAction   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 36
dl 0
loc 73
rs 10
c 0
b 0
f 0
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A handle() 0 46 5
1
<?php
2
3
/**
4
 * webtrees-lib: MyArtJaub library for webtrees
5
 *
6
 * @package MyArtJaub\Webtrees
7
 * @subpackage GeoDispersion
8
 * @author Jonathan Jaubart <[email protected]>
9
 * @copyright Copyright (c) 2009-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\GeoDispersion\Http\RequestHandlers;
16
17
use Fisharebest\Webtrees\FlashMessages;
18
use Fisharebest\Webtrees\I18N;
19
use Fisharebest\Webtrees\Log;
20
use Fisharebest\Webtrees\Tree;
21
use Fisharebest\Webtrees\Validator;
22
use Fisharebest\Webtrees\Services\ModuleService;
23
use MyArtJaub\Webtrees\Module\GeoDispersion\GeoDispersionModule;
24
use MyArtJaub\Webtrees\Module\GeoDispersion\Model\GeoAnalysisMapAdapter;
25
use MyArtJaub\Webtrees\Module\GeoDispersion\Services\GeoAnalysisViewDataService;
26
use MyArtJaub\Webtrees\Module\GeoDispersion\Services\MapAdapterDataService;
27
use MyArtJaub\Webtrees\Module\GeoDispersion\Views\GeoAnalysisMap;
28
use Psr\Http\Message\ResponseInterface;
29
use Psr\Http\Message\ServerRequestInterface;
30
use Psr\Http\Server\RequestHandlerInterface;
31
use Throwable;
32
33
/**
34
 * Request handler for deleting invalid geographical analysis map adapters for a view.
35
 */
36
class MapAdapterDeleteInvalidAction implements RequestHandlerInterface
37
{
38
    private ?GeoDispersionModule $module;
39
    private GeoAnalysisViewDataService $geoview_data_service;
40
    private MapAdapterDataService $mapadapter_data_service;
41
42
    /**
43
     * Constructor for MapAdapterDeleteInvalidAction Request Handler
44
     *
45
     * @param ModuleService $module_service
46
     * @param GeoAnalysisViewDataService $geoview_data_service
47
     * @param MapAdapterDataService $mapadapter_data_service
48
     */
49
    public function __construct(
50
        ModuleService $module_service,
51
        GeoAnalysisViewDataService $geoview_data_service,
52
        MapAdapterDataService $mapadapter_data_service
53
    ) {
54
        $this->module = $module_service->findByInterface(GeoDispersionModule::class)->first();
55
        $this->geoview_data_service = $geoview_data_service;
56
        $this->mapadapter_data_service = $mapadapter_data_service;
57
    }
58
59
    /**
60
     * {@inheritDoc}
61
     * @see \Psr\Http\Server\RequestHandlerInterface::handle()
62
     */
63
    public function handle(ServerRequestInterface $request): ResponseInterface
64
    {
65
        $tree = Validator::attributes($request)->tree();
66
67
        if ($this->module === null) {
68
            FlashMessages::addMessage(
69
                I18N::translate('The attached module could not be found.'),
70
                'danger'
71
            );
72
            return redirect(route(AdminConfigPage::class, ['tree' => $tree->name()]));
73
        }
74
75
        $view_id = Validator::attributes($request)->integer('view_id', -1);
76
        $view = $this->geoview_data_service->find($tree, $view_id);
77
78
        if ($view === null || !($view instanceof GeoAnalysisMap)) {
79
            FlashMessages::addMessage(
80
                I18N::translate('The view with ID ā€œ%sā€ does not exist.', I18N::number($view_id)),
81
                'danger'
82
            );
83
            return redirect(route(AdminConfigPage::class, ['tree' => $tree->name()]));
84
        }
85
86
        /** @var \Illuminate\Support\Collection<int> $valid_map_adapters */
87
        $valid_map_adapters = $this->mapadapter_data_service
88
            ->allForView($view)
89
            ->map(fn(GeoAnalysisMapAdapter $map_adapter): int => $map_adapter->id());
90
91
        try {
92
            $this->mapadapter_data_service->deleteInvalid($view, $valid_map_adapters);
93
            FlashMessages::addMessage(
94
                I18N::translate('The invalid map configurations have been successfully deleted.'),
95
                'success'
96
            );
97
        } catch (Throwable $ex) {
98
            FlashMessages::addMessage(
99
                I18N::translate('An error occured while deleting the invalid map configurations.'),
100
                'danger'
101
            );
102
            //phpcs:ignore Generic.Files.LineLength.TooLong
103
            Log::addConfigurationLog('Module ' . $this->module->title() . ' : Error when deleting invalid map configurations: ' . $ex->getMessage());
104
        }
105
106
        return redirect(route(GeoAnalysisViewEditPage::class, [
107
            'tree'      => $tree->name(),
108
            'view_id'   => $view_id
109
        ]));
110
    }
111
}
112