Passed
Branch main (f9aaf7)
by Jonathan
14:43
created

GeoAnalysisViewListData::handle()   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 46
Code Lines 34

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 34
nc 2
nop 1
dl 0
loc 46
rs 9.376
c 0
b 0
f 0
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\GeoDispersion\Http\RequestHandlers;
16
17
use Fisharebest\Webtrees\I18N;
18
use Fisharebest\Webtrees\Tree;
19
use Fisharebest\Webtrees\Exceptions\HttpNotFoundException;
20
use Fisharebest\Webtrees\Services\DatatablesService;
21
use Fisharebest\Webtrees\Services\ModuleService;
22
use MyArtJaub\Webtrees\Module\GeoDispersion\GeoDispersionModule;
23
use MyArtJaub\Webtrees\Module\GeoDispersion\Services\GeoAnalysisViewDataService;
24
use MyArtJaub\Webtrees\Module\GeoDispersion\Views\AbstractGeoAnalysisView;
25
use Psr\Http\Message\ResponseInterface;
26
use Psr\Http\Message\ServerRequestInterface;
27
use Psr\Http\Server\RequestHandlerInterface;
28
29
/**
30
 * Request handler for listing geographical dispersion analysis views in JSON format.
31
 *
32
 */
33
class GeoAnalysisViewListData implements RequestHandlerInterface
34
{
35
    private ?GeoDispersionModule $module;
36
    private GeoAnalysisViewDataService $geoview_data_service;
37
    private DatatablesService $datatables_service;
38
39
    /**
40
     * Constructor for GeoAnalysisViewListData Request Handler
41
     *
42
     * @param ModuleService $module_service
43
     * @param GeoAnalysisViewDataService $geoview_data_service
44
     * @param DatatablesService $datatables_service
45
     */
46
    public function __construct(
47
        ModuleService $module_service,
48
        GeoAnalysisViewDataService $geoview_data_service,
49
        DatatablesService $datatables_service
50
    ) {
51
        $this->module = $module_service->findByInterface(GeoDispersionModule::class)->first();
52
        $this->geoview_data_service = $geoview_data_service;
53
        $this->datatables_service = $datatables_service;
54
    }
55
56
    /**
57
     * {@inheritDoc}
58
     * @see \Psr\Http\Server\RequestHandlerInterface::handle()
59
     */
60
    public function handle(ServerRequestInterface $request): ResponseInterface
61
    {
62
        if ($this->module === null) {
63
            throw new HttpNotFoundException(I18N::translate('The attached module could not be found.'));
64
        }
65
66
        $tree = $request->getAttribute('tree');
67
        assert($tree instanceof Tree);
68
69
        $module = $this->module;
70
        $module_name = $this->module->name();
71
        return response(['data' => $this->geoview_data_service->all($tree, true)
72
            ->map(fn(AbstractGeoAnalysisView $view) => [
73
                'edit' => view($module_name . '::admin/view-table-options', [
74
                    'view_id' => $view->id(),
75
                    'view_enabled' => $view->isEnabled(),
76
                    'view_edit_route' => route(GeoAnalysisViewEditPage::class, [
77
                        'tree' => $tree->name(),
78
                        'view_id' => $view->id()
79
                    ]),
80
                    'view_delete_route' => route(GeoAnalysisViewDeleteAction::class, [
81
                        'tree' => $tree->name(),
82
                        'view_id' => $view->id()
83
                    ]),
84
                    'view_status_route' => route(GeoAnalysisViewStatusAction::class, [
85
                        'tree' => $tree->name(),
86
                        'view_id' => $view->id(),
87
                        'enable' => $view->isEnabled() ? 0 : 1
88
                    ]),
89
                ]),
90
                'enabled' =>  [
91
                    'display' => view($module_name . '::components/yes-no-icons', ['yes' => $view->isEnabled()]),
92
                    'raw' => $view->isEnabled() ? 0 : 1
93
                ],
94
                'type' =>  $view->icon($module),
95
                'description' => [
96
                    'display' => '<span dir="auto">' . e($view->description()) . '</span>',
97
                    'raw' => e($view->description())
98
                ],
99
                'analysis' => [
100
                    'display' => '<span dir="auto">' . e($view->analysis()->title()) . '</span>',
101
                    'raw' => e($view->analysis()->title())
102
                ],
103
                'place_depth' => [
104
                    'display' => I18N::number($view->placesDepth()),
105
                    'raw' => $view->placesDepth()
106
                ]
107
            ])
108
        ]);
109
    }
110
}
111