. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\FlashMessages; use Fisharebest\Webtrees\I18N; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use function redirect; /** * Class OpenStreetMap - use maps within webtrees */ class OpenStreetMap extends AbstractModule implements ModuleConfigInterface, ModuleMapProviderInterface { use ModuleConfigTrait; use ModuleMapProviderTrait; /** * Name of the map provider. * * @return string */ public function description(): string { $link = 'www.openstreetmap.org'; // I18N: %s is a link/URL return I18N::translate('Create maps using %s.', $link); } /** * Name of the map provider. * * @return string */ public function title(): string { return I18N::translate('OpenStreetMap™'); } /** * @return ResponseInterface */ public function getAdminAction(): ResponseInterface { $this->layout = 'layouts/administration'; return $this->viewResponse('modules/openstreetmap/config', [ 'title' => $this->title(), ]); } /** * @param ServerRequestInterface $request * * @return ResponseInterface */ public function postAdminAction(ServerRequestInterface $request): ResponseInterface { $params = (array) $request->getParsedBody(); FlashMessages::addMessage(I18N::translate('The preferences for the module “%s” have been updated.', $this->title()), 'success'); return redirect($this->getConfigLink()); } /** * Parameters to create a TileLayer in LeafletJs. * * @return array */ public function leafletJsTileLayers(): array { return [ (object) [ 'attribution' => 'Map data ©OpenStreetMap contributors, CC-BY-SA', 'default' => true, 'label' => 'Mapnik', 'maxZoom' => 19, 'minZoom' => 2, 'subdomains' => ['a', 'b', 'c'], 'url' => 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', ], (object) [ 'attribution' => 'Map data ©Karte hergestellt aus OpenStreetMap-Daten contributors, CC-BY-SA', 'default' => false, 'label' => 'Deutsch', 'maxZoom' => 18, 'minZoom' => 2, 'subdomains' => ['a', 'b', 'c'], 'url' => 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png', ], (object) [ 'attribution' => 'Map data ©OpenStreetMap contributors, CC-BY-SA', 'default' => false, 'label' => 'Français', 'maxZoom' => 20, 'minZoom' => 2, 'subdomains' => ['a', 'b', 'c'], 'url' => 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', ], ]; } }