Passed
Branch feature/2.1-geodispersion-dev (38d49e)
by Jonathan
04:17
created

MapAdapterDeleteAction::handle()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 44
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 28
c 1
b 0
f 0
nc 4
nop 1
dl 0
loc 44
rs 9.472
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-2021, 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\Services\ModuleService;
22
use MyArtJaub\Webtrees\Module\GeoDispersion\GeoDispersionModule;
23
use MyArtJaub\Webtrees\Module\GeoDispersion\Services\MapAdapterDataService;
24
use Psr\Http\Message\ResponseInterface;
25
use Psr\Http\Message\ServerRequestInterface;
26
use Psr\Http\Server\RequestHandlerInterface;
27
28
/**
29
 * Request handler for deleting a geographical analysis map adapter.
30
 */
31
class MapAdapterDeleteAction implements RequestHandlerInterface
32
{
33
    private ?GeoDispersionModule $module;
34
    private MapAdapterDataService $mapadapter_data_service;
35
36
    /**
37
     * Constructor for MapAdapterDeleteAction Request Handler
38
     *
39
     * @param ModuleService $module_service
40
     * @param MapAdapterDataService $mapadapter_data_service
41
     */
42
    public function __construct(ModuleService $module_service, MapAdapterDataService $mapadapter_data_service)
43
    {
44
        $this->module = $module_service->findByInterface(GeoDispersionModule::class)->first();
45
        $this->mapadapter_data_service = $mapadapter_data_service;
46
    }
47
48
    /**
49
     * {@inheritDoc}
50
     * @see \Psr\Http\Server\RequestHandlerInterface::handle()
51
     */
52
    public function handle(ServerRequestInterface $request): ResponseInterface
53
    {
54
        $tree = $request->getAttribute('tree');
55
        assert($tree instanceof Tree);
56
57
        $admin_config_route = route(AdminConfigPage::class, ['tree' => $tree->name()]);
58
59
        if ($this->module === null) {
60
            FlashMessages::addMessage(
61
                I18N::translate('The attached module could not be found.'),
62
                'danger'
63
            );
64
            return redirect($admin_config_route);
65
        }
66
        $adapter_id = (int) $request->getAttribute('adapter_id');
67
        $map_adapter = $this->mapadapter_data_service->find($adapter_id);
68
69
        if ($map_adapter === null) {
70
            FlashMessages::addMessage(
71
                I18N::translate('The map configuration with ID “%d” does not exist.', I18N::number($adapter_id)),
72
                'danger'
73
            );
74
            return redirect($admin_config_route);
75
        }
76
77
        if ($this->mapadapter_data_service->delete($map_adapter) > 0) {
78
            FlashMessages::addMessage(
79
                I18N::translate('The map configuration has been successfully deleted'),
80
                'success'
81
            );
82
            //phpcs:ignore Generic.Files.LineLength.TooLong
83
            Log::addConfigurationLog('Module ' . $this->module->title() . ' : Map Adapter “' . $map_adapter->id() . '” has been deleted.');
84
        } else {
85
            FlashMessages::addMessage(
86
                I18N::translate('An error occured while deleting the map configuration'),
87
                'danger'
88
            );
89
            //phpcs:ignore Generic.Files.LineLength.TooLong
90
            Log::addConfigurationLog('Module ' . $this->module->title() . ' : Map Adapter “' . $map_adapter->id() . '” could not be deleted. See error log.');
91
        }
92
93
        return redirect(route(GeoAnalysisViewEditPage::class, [
94
            'tree'      => $tree->name(),
95
            'view_id'   => $map_adapter->geoAnalysisViewId()
96
        ]));
97
    }
98
}
99