Compare commits

..

59 Commits
3.0.3 ... 3.1.6

Author SHA1 Message Date
David Molineus
4795767a8b Prepare the release 2020-01-03 09:08:59 +01:00
David Molineus
c0efdb058e Fix potential security issue 2020-01-03 09:08:52 +01:00
David Molineus
a4547ffb17 Use relative icon path for the backend group icon (#83) 2020-01-03 08:53:47 +01:00
David Molineus
a63c836535 Fix labels (See #83) 2020-01-03 08:49:07 +01:00
David Molineus
711b06c6d3 Do not apply options which value is null 2020-01-03 08:43:21 +01:00
David Molineus
70b7d0ab9c Fix release date 2019-08-26 09:04:19 +02:00
David Molineus
ea59841d6e Merge tag '3.1.5' 2019-08-26 09:03:57 +02:00
David Molineus
64c332bc25 Update node packages and recompile 2019-08-26 09:03:32 +02:00
David Molineus
3db5aad6d3 Fix composer.json 2019-08-21 13:29:08 +02:00
David Molineus
cef9d7ff44 Use twig instead of templating engine to render about page
This restores compatibility with Contao 4.8 without changing default
configuration of the symfony framework bundle.
2019-08-21 13:27:11 +02:00
David Molineus
06dd3655c0 Merge tag '3.1.4' 2019-02-13 12:56:00 +01:00
David Molineus
3b066dfeb7 Prepare release. 2019-02-13 12:53:50 +01:00
David Molineus
697e8d2f5e Drop unused function use statements. 2019-02-13 12:50:59 +01:00
David Molineus
a6c08ae8e5 Fix #71: Using multiple edit to copy entities leads to invalid aliases. Do not copy aliases at all. 2019-02-13 12:46:19 +01:00
David Molineus
bb8f9e42dc Fix #76: Urls to packagist used packagist.com instead of packagist.org. 2019-02-13 12:35:00 +01:00
David Molineus
3be5da9176 Fix #75: A non existing image of an image icon throws an exception. 2019-02-13 12:33:44 +01:00
David Molineus
55e4ed0702 Fix #74: Markers with negative coordinates aren't displayed on the map. 2019-02-13 12:09:40 +01:00
David Molineus
d42e0e122f Fix order changes in layer control element aren't applied (#72). 2019-02-13 12:06:30 +01:00
David Molineus
ac05d103f1 Normalize composer.json, add user documentation link to support section and to the readme (See #9). 2019-02-13 12:01:42 +01:00
David Molineus
cc9990cf4d Test against PHP 7.4snapshot. 2019-02-13 11:54:33 +01:00
David Molineus
9643b2c196 Link version number to the github compare link. 2019-02-13 11:27:32 +01:00
David Molineus
4d55b012fd Merge branch 'master' of github.com:netzmacht/contao-leaflet-maps 2019-01-10 16:42:31 +01:00
David Molineus
39a7207e23 Merge tag '3.1.3' 2019-01-10 16:41:33 +01:00
David Molineus
c4feeb1b38 Add missing error block. 2019-01-10 16:41:03 +01:00
David Molineus
cb3e9bc8b4 Make controller public as it's required by Symfony 4. 2019-01-10 16:39:43 +01:00
David Molineus
6a88ed380b Update travis configuration for compatibility issues with phpcq v1.2.0. Test against PHP 7.3 as well. 2018-12-18 10:56:29 +01:00
David Molineus
59e671f8ea Update CHANGELOG.md 2018-12-18 09:55:36 +01:00
David Molineus
b0df34b86e Update CHANGELOG.md 2018-12-18 09:55:18 +01:00
David Molineus
4ea2adbb85 Merge tag '3.1.2' 2018-12-18 09:26:49 +01:00
David Molineus
dc5a0a081e Complete implementation of tile providers. 2018-12-18 09:23:47 +01:00
David Molineus
79f6efd9f3 Update leaflet providers. 2018-12-17 17:01:08 +01:00
David Molineus
e7bede78b1 Drop not required .htaccess folder. 2018-12-17 15:21:05 +01:00
David Molineus
997e16891b Add defined check. 2018-12-17 15:20:51 +01:00
David Molineus
d5407357d8 Merge tag '3.1.1' 2018-12-07 11:22:41 +01:00
David Molineus
1ba19f63b1 Prepare release. 2018-12-07 11:22:23 +01:00
David Molineus
878492c0b1 Fix Code style. 2018-12-07 11:22:16 +01:00
David Molineus
57ba63556a Ignore markers without defined coordinates. 2018-12-06 10:37:39 +01:00
David Molineus
0e2b8dd3cd Fix missing marker cluster icon. 2018-11-01 16:01:16 +01:00
David Molineus
91d3786187 Merge tag '3.1.0' 2018-11-01 15:37:04 +01:00
David Molineus
5e20b83503 Prepare release. 2018-11-01 15:36:35 +01:00
David Molineus
ca103521aa add url-polyfill to about page. 2018-11-01 15:34:58 +01:00
David Molineus
f422459be2 Gulp task improvement. 2018-11-01 11:37:32 +01:00
David Molineus
c661abb626 Fix dynamic data loading for new request url. 2018-11-01 10:26:38 +01:00
David Molineus
83226cdd80 Fix gulp watch task. 2018-11-01 10:25:54 +01:00
David Molineus
ed10175072 Add hint that zoom level is probably required (Close #56). 2018-10-30 13:00:52 +01:00
David Molineus
d2338332b4 Rewrite about page using own route (Close #48). 2018-10-30 12:38:46 +01:00
David Molineus
7aa4f38902 Update readme. 2018-10-30 10:53:44 +01:00
David Molineus
cb03dcfa41 Fix broken marker cluster (#60). 2018-10-30 10:52:47 +01:00
David Molineus
2108de32d9 Add support for distance filter for the marker layer. 2018-10-30 10:48:38 +01:00
David Molineus
314e2d21ee Update readme. 2018-10-30 09:53:12 +01:00
David Molineus
6faaa866ad Use minified scripts. 2018-10-30 09:38:38 +01:00
David Molineus
b22563b38c Prevent form submit on enter when using control geocoder and close popup when value is chosen. 2018-10-30 09:36:06 +01:00
David Molineus
a10e55a126 Fix: Do not cache insert tags as it would create esi tags. 2018-10-30 08:45:47 +01:00
David Molineus
e27ac21902 Also replace non cachable inserttags. 2018-10-29 16:24:07 +01:00
David Molineus
0ba725ed38 Implement custom route for data request to prevent partial rendering of the page and it's possible issues (f.e. form captcha changes) (Close #49). 2018-10-29 16:02:50 +01:00
David Molineus
7ec2ee0d96 Upgrade to gulp 4.0. 2018-10-29 15:46:38 +01:00
David Molineus
9e54f12555 Use TL_CSS_UNITS for with and height option (#59). 2018-10-19 16:37:49 +02:00
David Molineus
b323049f9d Merge tag '3.0.4' 2018-10-08 16:26:20 +02:00
David Molineus
873de89d7c Fix broken content element attributes (Missing class and custom id). 2018-10-08 16:26:04 +02:00
59 changed files with 4473 additions and 338 deletions

1
.gitignore vendored
View File

@@ -25,4 +25,3 @@ build.properties
# NPM
node_modules
package-lock.json

View File

@@ -1,19 +1,32 @@
dist: xenial
addons:
apt:
packages:
- ant-optional
language: php
php:
- "7.0"
- "7.1"
- "7.3"
- "7.2"
- "7.1"
- "7.4snapshot"
- "nightly"
env:
- CONTAO_VERSION=contao/core-bundle ~4.4.0
- CONTAO_VERSION=contao/core-bundle ~4.5.0
- CONTAO_VERSION=contao/core-bundle ~4.6.0
matrix:
exclude:
allow_failures:
- php: "nightly"
- php: "7.4snapshot"
sudo: false
install:
before_script:
- echo "memory_limit=-1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
- travis_retry composer self-update && composer --version
- travis_retry composer require $CONTAO_VERSION --no-update
- travis_retry composer update --prefer-dist --no-interaction

View File

@@ -6,35 +6,125 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## 3.0.3 - 2018-09-18
## [Unreleased]
[Full Changelog](https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.2...3.0.3)
## [3.1.6] - 2020-01-03
### Fixed
- Do not add options which value is `NULL`
- Fix button labels ([#83](https://github.com/netzmacht/contao-leaflet-maps/issues/83))
- Fix potential security issue of symfony/dependency-injection (https://github.com/advisories/GHSA-pgwj-prpq-jpc2)
### Changed
- Use relative path for backend icon ([#82](https://github.com/netzmacht/contao-leaflet-maps/issues/82))
## [3.1.5] - 2019-08-26
### Fixed
- Use twig directly instead of templating component to restore Contao 4.8
## [3.1.4] - 2019-02-13
### Fixed
- Fix ordering changes in layer control element aren't recognized ([#72](https://github.com/netzmacht/contao-leaflet-maps/issues/72))
- Fix markers with negative coordinates aren't displayed ([#74](https://github.com/netzmacht/contao-leaflet-maps/issues/74))
- Fix image icon with non existing image throws exception ([#75](https://github.com/netzmacht/contao-leaflet-maps/issues/75))
- Fix invalid alias then using multiple edit. Aliases aren't copied anymore. ([#71](https://github.com/netzmacht/contao-leaflet-maps/issues/71))
## [3.1.3] - 2019-01-10
### Fixed
- Fix broken api routes in Contao 4.6/Symfony 4 (#69)
- Fix broken about.html.twig template. Error block was missing
## 3.1.2 - 2018-12-18
[Full Changelog](https://github.com/netzmacht/contao-leaflet-maps/compare/3.1.1...3.1.2)
### Fixed
- Fix broken MapBox integration: Access token is now required
- Fix broken OpenWeatherMap integration: Api key is now required
- Fix broken Thunderforest integration: Api key is now required
### Added
- Add missing OpenPtMap of leaflet-providers
- Add missing OpenRailwayMap of leaflet-providers
- Add missing OpenFireMap of leaflet-providers
- Add missing SafeCast of leaflet-providers
- Add missing map types `normalNightTransit`, `normalNightTransitMobile`, `reducedDay`, `reducedNight`,
`hybridDayTransit` and `hybridDayGrey` of HERE provider
- Add missing map types `Voyager`, `VoyagerNoLabels`, `VoyagerOnlyLabels` and `VoyagerLabelsUnder` of CartoDB provider
- Add missing Wikimedia of leaflet-providers
- Add missing GeoportailFrance of leaflet-providers
- Add missing OneMapSG of leaflet-providers
## [3.1.1] - 2018-12-07
### Fixed
- Fix missing marker cluster icon.
- Ignore markers without coordinates to prevent uncaught exception caused by invalid coordinates.
## 3.1.0 - 2018-11-01
[Full Changelog](https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.4...3.1.0)
### Added
- Custom route to load map data.
- Add distance filter support for the marker layer (Bounds Mode "fit" has to be enabled).
- Add support for relative css units for map size definition (#59).
- Add hint that zoom level is probably required (#56).
### Deprecated
- Deprecate `Netzmacht\Contao\Leaflet\Frontend\RequestUrl`. Use router to generate request url for layer data.
- Deprecate `Netzmacht\Contao\Leaflet\Frontend\DataController`. Use introduced endpoint to get map data.
### Changed
- Require PHP 7.1.
- Rewritten about page using own route (#48).
### Fixed
- Pressing enter on backend geocode control doesn't submit form anymore.
- Fix broken marker cluster layer (#60).
## [3.0.4] - 2018-10-08
### Fixed
- Fix broken content element attributes (Missing class and custom id).
## [3.0.3] - 2018-09-18
### Fixed
- Make alias generator services public for Contao 4.6/Symfony 4.0 compatibility.
## 3.0.2 - 2018-08-23
[Full Changelog](https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.1...3.0.2)
## [3.0.2] - 2018-08-23
- Run composer require checker and solve issues.
## 3.0.1 - 2018-06-20
[Full Changelog](https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.0...3.0.1)
## [3.0.1] - 2018-06-20
- Fix broken dynamic bbox related data loading (#57)
## 3.0.0 - 2018-01-05
[Full Changelog](https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.0-beta1...3.0.0)
## [3.0.0] - 2018-01-05
- Make hook/dca listener services public
## 3.0.0-beta1 - 2017-11-15
[Full Changelog](https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.0-alpha2...3.0.0-beta1)
## [3.0.0-beta1] - 2017-11-15
Enhancements
@@ -45,9 +135,7 @@ Bugfixes
- Broken service definitions
- Broken file layer id
## 3.0.0-alpha1 - 2017-10-19
[Full Changelog](https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.0-alpha1...3.0.0-alpha2)
## [3.0.0-alpha2] - 2017-10-19
Implemented enhancements
@@ -56,3 +144,17 @@ Implemented enhancements
- New file layer for gpx,kml,wkt,topojson,geojson files added
- Bypass filesystem cache in debug mode
- Changelog added
[Unreleased]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.1.6...hotfix/3.1.7
[3.1.6]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.1.5...3.1.6
[3.1.5]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.1.4...3.1.5
[3.1.4]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.1.3...3.1.4
[3.1.3]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.1.2...3.1.3
[3.1.1]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.1.0...3.1.1
[3.0.4]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.3...3.0.4
[3.0.3]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.2...3.0.3
[3.0.2]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.1...3.0.2
[3.0.1]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.0...3.0.1
[3.0.0]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.0-beta1...3.0.0
[3.0.0-beta1]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.0-alpha2...3.0.0-beta1
[3.0-0-alpha2]: https://github.com/netzmacht/contao-leaflet-maps/compare/3.0.0-alpha1...3.0.0-alpha2

View File

@@ -2,9 +2,9 @@ Leaflet integration into Contao CMS
===================================
[![Build Status](http://img.shields.io/travis/netzmacht/contao-leaflet-maps/master.svg?style=flat-square)](https://travis-ci.org/netzmacht/contao-leaflet-maps)
[![Version](http://img.shields.io/packagist/v/netzmacht/contao-leaflet-maps.svg?style=flat-square)](http://packagist.com/packages/netzmacht/contao-leaflet-maps)
[![License](http://img.shields.io/packagist/l/netzmacht/contao-leaflet-maps.svg?style=flat-square)](http://packagist.com/packages/netzmacht/contao-leaflet-maps)
[![Downloads](http://img.shields.io/packagist/dt/netzmacht/contao-leaflet-maps.svg?style=flat-square)](http://packagist.com/packages/netzmacht/contao-leaflet-maps)
[![Version](http://img.shields.io/packagist/v/netzmacht/contao-leaflet-maps.svg?style=flat-square)](http://packagist.org/packages/netzmacht/contao-leaflet-maps)
[![License](http://img.shields.io/packagist/l/netzmacht/contao-leaflet-maps.svg?style=flat-square)](http://packagist.org/packages/netzmacht/contao-leaflet-maps)
[![Downloads](http://img.shields.io/packagist/dt/netzmacht/contao-leaflet-maps.svg?style=flat-square)](http://packagist.org/packages/netzmacht/contao-leaflet-maps)
[![Contao Community Alliance coding standard](http://img.shields.io/badge/cca-coding_standard-red.svg?style=flat-square)](https://github.com/contao-community-alliance/coding-standard)
This extension provides a backend gui for integrating [Leaflet](http://leafletjs.com/) into the Contao CMS.
@@ -38,6 +38,12 @@ Features
- Autoloading of required assets.
- [Layer for MetaModels](https://github.com/netzmacht/contao-leaflet-metamodels)
Documentation
-------------
A basic [user documentation](http://leaflet-maps-for-contao.readthedocs.org/) written in German is available.
Changelog
---------

View File

@@ -1,12 +1,12 @@
{
"name": "netzmacht/contao-leaflet-maps",
"type": "contao-bundle",
"description": "Contao Leaflet maps integration",
"keywords": [
"contao",
"maps",
"leaflet"
],
"type": "contao-bundle",
"license": "LGPL-3.0-or-later",
"authors": [
{
@@ -16,37 +16,49 @@
"role": "Developer"
}
],
"support": {
"email": "mail@netzmacht.de",
"issues": "https://github.com/netzmacht/contao-leaflet-maps/issues",
"source": "https://github.com/netzmacht/contao-leaflet-maps"
},
"require": {
"php": ">=7.0",
"php": ">=7.1",
"ext-json": "*",
"ext-pdo": "*",
"contao-community-alliance/meta-palettes": "^2.0 || ^1.11",
"contao/core-bundle": "~4.4",
"doctrine/cache": "^1.0",
"doctrine/dbal": "^2.5",
"menatwork/contao-multicolumnwizard": "^3.3",
"netzmacht/contao-leaflet-geocode-widget": "^1.2",
"netzmacht/contao-leaflet-libraries": "^1.3.4",
"netzmacht/contao-page-context": "~1.0",
"netzmacht/contao-toolkit": "~3.0",
"netzmacht/php-javascript-builder": "^1.0",
"netzmacht/php-leaflet": "^1.1.0",
"symfony/config": "~3.3 || ~4.0",
"symfony/dependency-injection": "^3.4.26 || ^4.1.12",
"symfony/event-dispatcher": "~3.3 || ~4.0",
"symfony/dependency-injection": "~3.3 || ~4.0",
"symfony/filesystem": "~3.3 || ~4.0",
"symfony/http-kernel": "~3.3 || ~4.0",
"symfony/twig-bundle": "~3.3 || ~4.0",
"symfony/translation": "~3.3 || ~4.0",
"symfony/templating": "~3.3 || ~4.0",
"netzmacht/contao-leaflet-libraries": "^1.0",
"netzmacht/contao-leaflet-geocode-widget": "^1.2",
"netzmacht/php-javascript-builder": "^1.0",
"netzmacht/php-leaflet": "^1.0.2",
"netzmacht/contao-toolkit": "~3.0",
"contao-community-alliance/meta-palettes": "^2.0 || ^1.5",
"menatwork/contao-multicolumnwizard": "^3.2",
"doctrine/cache": "^1.0"
"twig/twig": "^1.3.35 || ^2.0"
},
"require-dev": {
"phpcq/all-tasks": "^1.2",
"contao/manager-plugin": "^2.1",
"phpstan/phpstan": "^0.10.3"
"phpcq/all-tasks": "^1.2"
},
"extra": {
"branch-alias": {
"dev-master": "3.1.x-dev",
"dev-develop": "3.2.x-dev",
"dev-support/2.x": "2.0.x-dev"
},
"contao": {
"transifex": {
"project": "contao-leaflet-maps",
"prefix": "core-",
"languages_cto": "src/Bundle/Resources/contao/languages",
"languages_tx": ".tx"
}
},
"contao-manager-plugin": "Netzmacht\\Contao\\Leaflet\\Bundle\\ContaoManager\\Plugin"
},
"autoload": {
"psr-4": {
@@ -58,20 +70,10 @@
"vendor/phpcq/autoload-validation/hacks/contao-hack.php"
]
},
"extra": {
"branch-alias": {
"dev-master": "3.0.x-dev",
"dev-develop": "3.1.x-dev",
"dev-support/2.x": "2.0.x-dev"
},
"contao-manager-plugin": "Netzmacht\\Contao\\Leaflet\\Bundle\\ContaoManager\\Plugin",
"contao": {
"transifex": {
"project": "contao-leaflet-maps",
"prefix": "core-",
"languages_cto": "src/Bundle/Resources/contao/languages",
"languages_tx": ".tx"
}
}
"support": {
"email": "mail@netzmacht.de",
"issues": "https://github.com/netzmacht/contao-leaflet-maps/issues",
"source": "https://github.com/netzmacht/contao-leaflet-maps",
"docs": "http://leaflet-maps-for-contao.readthedocs.org/"
}
}

View File

@@ -1,28 +1,35 @@
var gulp = require('gulp');
var del = require('del');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
const { series, src, watch, dest, parallel, task} = require('gulp');
const del = require('promised-del');
const uglify = require('gulp-uglify');
const concat = require('gulp-concat');
var paths = {
minified: 'contao-leaflet.js',
scripts: ['js/*.js'],
scripts: ['js/vendor/*.js', 'js/*.js'],
dest: 'src/Bundle/Resources/public/js'
};
gulp.task('clear', function() {
del([paths.dest + '/' + paths.minified]);
});
function clean () {
return del([paths.dest + '/' + paths.minified]);
}
gulp.task('scripts', ['clear'], function() {
return gulp.src(paths.scripts)
function build () {
return src(paths.scripts)
.pipe(concat(paths.minified))
.pipe(uglify())
.pipe(gulp.dest(paths.dest));
});
.pipe(dest(paths.dest));
}
const buildTasks = series(clean, build);
gulp.task('default', ['scripts']);
function watchTask () {
watch(
paths.scripts,
buildTasks
)
}
gulp.task('watch', function() {
gulp.watch(paths.scripts, ['scripts']);
});
exports.clean = clean;
exports.watch = watchTask;
exports.build = buildTasks;
exports.default = buildTasks;

View File

@@ -138,7 +138,8 @@ L.Contao = L.Evented.extend({
* @param customLayer optional custom layer.
* @param map Pass a map object so that the data loading events are passed to the map.
*/
loadFile: function (url, type, options, customLayer, map) {
loadUrl: function (url, type, options, customLayer, map) {
url = this.applyFilterToUrl(url, map);
var layer = omnivore[type](url, options, customLayer);
if (map) {
@@ -147,7 +148,7 @@ L.Contao = L.Evented.extend({
// Add listener for map bounds changes.
if (map.options.dynamicLoad && layer.options.boundsMode == 'fit') {
layer.options.requestHash = hash;
layer.options.requestUrl = url;
map.on('moveend', layer.refreshData, layer);
map.on('layerremove', function(e) {
@@ -172,6 +173,19 @@ L.Contao = L.Evented.extend({
return layer;
},
/**
* Load data from an url into a layer using omnivore.
*
* @param url A file url.
* @param type The response content format.
* @param options Parser options
* @param customLayer optional custom layer.
* @param map Pass a map object so that the data loading events are passed to the map.
*/
loadFile: function (url, type, options, customLayer, map) {
return this.loadUrl(url, type, options, customLayer, map);
},
/**
* Point to layer callback. Adds a geo json point to the layer.
*
@@ -313,6 +327,36 @@ L.Contao = L.Evented.extend({
}
return value;
},
/**
* Apply the filter to a request url.
*
* @param {string} url The request url.
* @param {L.Map} map The map.
*
* @returns {string}
*/
applyFilterToUrl: function (url, map) {
var value, query, bounds;
if (!map || !map.options.dynamicLoad) {
return url;
}
url = new URL(url);
query = new URLSearchParams(url.search);
bounds = map.getBounds();
value = bounds.getSouth() + ',' + bounds.getWest();
value += ',' + bounds.getNorth() + ',' + bounds.getEast();
query.set('filter', 'bbox');
query.set('values', value);
url.search = query.toString();
return url.toString();
}
});

View File

@@ -29,6 +29,6 @@ L.GeoJSON.include({
});
// TODO: Allow other data formats.
omnivore.geojson(L.contao.createRequestUrl(this.options.requestHash, e.target), null, dataLayer);
omnivore.geojson(L.contao.applyFilterToUrl(this.options.requestUrl, e.target), null, dataLayer);
}
});

3280
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -4,10 +4,11 @@
"description": "Leaflet maps for Contao",
"main": "gulpfile.js",
"dependencies": {
"del": "^3.0.0",
"gulp": "^3.9.1",
"gulp-concat": "^2.6.0",
"gulp-uglify": "^3.0.0"
"gulp": "^4.0.2",
"gulp-cli": "^2.2.0",
"gulp-concat": "^2.6.1",
"gulp-uglify": "^3.0.2",
"promised-del": "^1.0.2"
},
"devDependencies": {},
"scripts": {
@@ -23,7 +24,7 @@
"Maps"
],
"author": "netzmacht David Molineus",
"license": "LGPL-3.0",
"license": "LGPL-3.0-or-later",
"bugs": {
"url": "https://github.com/netzmacht/contao-leaflet-maps/issues"
},

View File

@@ -5,37 +5,66 @@
*
* @package contao-leaflet-maps
* @author David Molineus <david.molineus@netzmacht.de>
* @copyright 2014-2017 netzmacht David Molineus. All rights reserved.
* @copyright 2014-2019 netzmacht David Molineus. All rights reserved.
* @license LGPL-3.0 https://github.com/netzmacht/contao-leaflet-maps/blob/master/LICENSE
* @filesource
*/
namespace Netzmacht\Contao\Leaflet\Backend;
namespace Netzmacht\Contao\Leaflet\Backend\Action;
use Contao\BackendTemplate;
use Symfony\Component\HttpFoundation\Response;
use Twig\Environment;
/**
* Credits backend module.
*
* @package Netzmacht\Contao\Leaflet\Backend
*/
class About
final class AboutAction
{
/**
* Twig environment.
*
* @var Environment
*/
private $twig;
/**
* Project directory.
*
* @var string
*/
private $projectDir;
/**
* AboutAction constructor.
*
* @param Environment $twig Twig environment.
* @param string $projectDir Project directory.
*/
public function __construct(Environment $twig, string $projectDir)
{
$this->twig = $twig;
$this->projectDir = $projectDir;
}
/**
* Generate the backend view.
*
* @return string
*/
public function generate()
public function __invoke(): Response
{
$template = new BackendTemplate('be_leaflet_about');
$data = [
'headline' => 'Leaftlet maps integration for Contao CMS',
'libraries' => $this->getLibraries(),
];
$template->headline = 'Leaftlet maps integration for Contao CMS';
$template->libraries = $this->getLibraries();
[$data['version'], $data['dependencies']] = $this->extractFromComposer();
list($template->version, $template->dependencies) = $this->extractFromComposer();
return $template->parse();
return new Response(
$this->twig->render('@NetzmachtContaoLeaflet/backend/about.html.twig', $data)
);
}
/**
@@ -45,7 +74,7 @@ class About
*
* @SuppressWarnings(PHPMD.Superglobals)
*/
private function getLibraries()
private function getLibraries(): array
{
return array_map(
function ($library) {
@@ -70,7 +99,7 @@ class About
array_filter(
$GLOBALS['LEAFLET_LIBRARIES'],
function ($library) {
return isset($library['name']) && isset($library['license']);
return isset($library['name'], $library['license']);
}
)
);
@@ -81,10 +110,10 @@ class About
*
* @return array
*/
private function extractFromComposer()
private function extractFromComposer(): array
{
$extFile = TL_ROOT . '/vendor/netzmacht/contao-leaflet-maps/composer.json';
$lockFile = TL_ROOT . '/composer.lock';
$extFile = $this->projectDir . '/vendor/netzmacht/contao-leaflet-maps/composer.json';
$lockFile = $this->projectDir . '/composer.lock';
if (!file_exists($extFile) || !file_exists($lockFile)) {
return [];

View File

@@ -18,15 +18,20 @@ use Contao\CoreBundle\ContaoCoreBundle;
use Contao\ManagerPlugin\Bundle\BundlePluginInterface;
use Contao\ManagerPlugin\Bundle\Config\BundleConfig;
use Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
use Contao\ManagerPlugin\Routing\RoutingPluginInterface;
use Netzmacht\Contao\Leaflet\Bundle\NetzmachtContaoLeafletBundle;
use Netzmacht\Contao\PageContext\NetzmachtContaoPageContextBundle;
use Netzmacht\Contao\Toolkit\Bundle\NetzmachtContaoToolkitBundle;
use Symfony\Component\Config\Loader\LoaderResolverInterface;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\RouteCollection;
/**
* Contao manager plugin.
*
* @package Netzmacht\Contao\Leaflet\ContaoManager
*/
class Plugin implements BundlePluginInterface
class Plugin implements BundlePluginInterface, RoutingPluginInterface
{
/**
* {@inheritdoc}
@@ -35,8 +40,27 @@ class Plugin implements BundlePluginInterface
{
return [
BundleConfig::create(NetzmachtContaoLeafletBundle::class)
->setLoadAfter([ContaoCoreBundle::class, NetzmachtContaoToolkitBundle::class])
->setLoadAfter(
[
ContaoCoreBundle::class,
NetzmachtContaoToolkitBundle::class,
NetzmachtContaoPageContextBundle::class
]
)
->setReplace(['leaflet']),
];
}
/**
* {@inheritdoc}
*/
public function getRouteCollection(LoaderResolverInterface $resolver, KernelInterface $kernel): ?RouteCollection
{
$loader = $resolver->resolve(__DIR__ . '/../Resources/config/routing.yml');
if (!$loader) {
return null;
}
return $loader->load(__DIR__ . '/../Resources/config/routing.yml');
}
}

View File

@@ -32,7 +32,7 @@ parameters:
markercluster:
children: true
icon: 'bundles/netzmachtcontaoleaflet/img/markercluster.png'
icon: 'bundles/netzmachtcontaoleaflet/img/cluster.png'
tile:
children: false

View File

@@ -30,6 +30,8 @@ services:
- '@netzmacht.contao_toolkit.dca.manager'
- '@database_connection'
- '@netzmacht.contao_toolkit.repository_manager'
- '@translator'
- '@session'
netzmacht.contao_leaflet.listeners.dca.control:
class: Netzmacht\Contao\Leaflet\Listener\Dca\ControlDcaListener
@@ -113,3 +115,13 @@ services:
- '@netzmacht.contao_leaflet.definition.builder'
tags:
- { name: 'contao.hook', hook: 'initializeSystem', method: 'onInitializeSystem' }
netzmacht.contao_leaflet.listeners.backend_menu:
class: Netzmacht\Contao\Leaflet\Listener\Backend\UserNavigationListener
arguments:
- '@request_stack'
- '@router'
- '@translator'
- '@netzmacht.contao_toolkit.assets_manager'
tags:
- { name: 'contao.hook', hook: 'getUserNavigation', method: '__invoke'}

View File

@@ -32,6 +32,7 @@ services:
class: Netzmacht\Contao\Leaflet\Mapper\Layer\MarkersLayerMapper
arguments:
- '@netzmacht.contao_toolkit.repository_manager'
- '@router'
tags:
- { name: netzmacht.contao_leaflet.mapper }
@@ -46,6 +47,7 @@ services:
class: Netzmacht\Contao\Leaflet\Mapper\Layer\VectorsLayerMapper
arguments:
- '@netzmacht.contao_toolkit.repository_manager'
- '@router'
tags:
- { name: netzmacht.contao_leaflet.mapper }
@@ -69,7 +71,7 @@ services:
- '@netzmacht.contao_leaflet.map.assets'
- '@netzmacht.contao_toolkit.repository_manager'
tags:
- { name: netzmacht.contao_leflet_maps.mapper }
- { name: netzmacht.contao_leaflet.mapper }
netzmacht.contao_leaflet.mapper.file_layer:
class: Netzmacht\Contao\Leaflet\Mapper\Layer\FileLayerMapper

View File

@@ -1,13 +1,22 @@
parameters:
netzmacht.contao_leaflet.providers:
OpenStreetMap:
variants: ['Mapnik', 'BlackAndWhite', 'DE', 'France', 'HOT', 'BZH']
variants: ['Mapnik', 'BlackAndWhite', 'DE', 'CH', 'France', 'HOT', 'BZH']
OpenSeaMap: []
OpenTopoMap: []
OpenPtMap: []
OpenRailwayMap: []
OpenFireMap: []
SafeCast: []
Thunderforest:
class: 'Netzmacht\LeafletPHP\Plugins\LeafletProviders\ThunderforestProvider'
variants:
- 'OpenCycleMap'
- 'Transport'
@@ -16,6 +25,9 @@ parameters:
- 'Landscape'
- 'Outdoors'
- 'Pioneer'
options:
apiKey: 'tile_provider_key'
fields: ['tile_provider_key']
OpenMapSurfer:
variants: ['Roads', 'AdminBounds', 'Grayscale']
@@ -26,7 +38,8 @@ parameters:
MapBox:
class: 'Netzmacht\LeafletPHP\Plugins\LeafletProviders\MapBoxProvider'
options:
key: 'tile_provider_key'
accessToken: 'tile_provider_key'
fields: ['tile_provider_key']
Stamen:
variants:
@@ -56,6 +69,7 @@ parameters:
- 'WorldGrayCanvas'
OpenWeatherMap:
class: 'Netzmacht\LeafletPHP\Plugins\LeafletProviders\OpenWeatherMapProvider'
variants:
- 'Clouds'
- 'CloudsClassic'
@@ -68,6 +82,9 @@ parameters:
- 'Wind'
- 'Temperature'
- 'Snow'
options:
apiKey: 'tile_provider_key'
fields: ['tile_provider_key']
HERE:
class: 'Netzmacht\LeafletPHP\Plugins\LeafletProviders\HereProvider'
@@ -83,12 +100,18 @@ parameters:
- 'normalNightMobile'
- 'normalNightGrey'
- 'normalNightGreyMobile'
- 'normalNightTransit'
- 'normalNightTransitMobile'
- 'reducedDay'
- 'reducedNight'
- 'basicMap'
- 'mapLabels'
- 'trafficFlow'
- 'carnavDayGrey'
- 'hybridDay'
- 'hybridDayMobile'
- 'hybridDayTransit'
- 'hybridDayGrey'
- 'pedestrianDay'
- 'pedestrianNight'
- 'satelliteDay'
@@ -123,6 +146,10 @@ parameters:
- 'DarkMatter'
- 'DarkMatterNoLabels'
- 'DarkMatterOnlyLabels'
- 'Voyager'
- 'VoyagerNoLabels'
- 'VoyagerOnlyLabels'
- 'VoyagerLabelsUnder'
HikeBike:
variants:
@@ -155,3 +182,20 @@ parameters:
- 'ModisTerraChlorophyll'
NLS: []
Wikimedia: []
GeoportailFrance:
variants:
- 'parcels'
- 'ignMaps'
- 'maps'
- 'orthos'
OneMapSG:
variants:
- 'Default'
- 'Night'
- 'Original'
- 'Grey'
- 'LandLot'

View File

@@ -0,0 +1,18 @@
leaflet_layer:
path: /leaflet/api/layer/{layerId}
controller: Netzmacht\Contao\Leaflet\Frontend\Action\LayerDataAction
defaults:
_leaflet_scope: page
_format: geojson
_scope: frontend
requirements:
_format: geojson
context: \w+
contextId: \d+
leaflet_backend_about:
path: /contao/leaflet/about
controller: Netzmacht\Contao\Leaflet\Backend\Action\AboutAction
defaults:
_scope: backend
_backend_module: leaflet_about

View File

@@ -122,3 +122,19 @@ services:
arguments:
- '@netzmacht.contao_leaflet.filter_factory'
- '%kernel.debug%'
Netzmacht\Contao\Leaflet\Frontend\PageIdDeterminator:
tags:
- { name: Netzmacht\Contao\PageContext\Request\PageIdDeterminator }
Netzmacht\Contao\Leaflet\Frontend\Action\LayerDataAction:
public: true
arguments:
- '@netzmacht.contao_leaflet.map.provider'
- '@netzmacht.contao_leaflet.filter_factory'
Netzmacht\Contao\Leaflet\Backend\Action\AboutAction:
public: true
arguments:
- '@twig'
- '%kernel.project_dir%'

View File

@@ -40,16 +40,11 @@ array_insert(
'stylesheet' => 'bundles/netzmachtcontaoleaflet/css/backend.css',
'javascript' => 'bundles/netzmachtcontaoleaflet/js/backend.js',
],
'leaflet_about' => [
'callback' => Netzmacht\Contao\Leaflet\Backend\About::class,
'icon' => 'bundles/netzmachtcontaoleaflet/img/about.png',
'stylesheet' => 'bundles/netzmachtcontaoleaflet/css/about.css',
],
],
]
);
if (TL_MODE === 'BE') {
if (defined('TL_MODE') && TL_MODE === 'BE') {
$GLOBALS['TL_CSS'][] = 'bundles/netzmachtcontaoleaflet/css/backend_global.css';
}

View File

@@ -49,7 +49,7 @@ $GLOBALS['TL_DCA']['tl_content']['fields']['leaflet_mapId'] = [
$GLOBALS['TL_DCA']['tl_content']['fields']['leaflet_width'] = [
'label' => &$GLOBALS['TL_LANG']['tl_content']['leaflet_width'],
'inputType' => 'inputUnit',
'options' => ['px', '%', 'em', 'pt', 'pc', 'in', 'cm', 'mm'],
'options' => $GLOBALS['TL_CSS_UNITS'],
'search' => false,
'exclude' => true,
'eval' => ['rgxp' => 'digit', 'tl_class' => 'clr w50'],
@@ -60,7 +60,7 @@ $GLOBALS['TL_DCA']['tl_content']['fields']['leaflet_width'] = [
$GLOBALS['TL_DCA']['tl_content']['fields']['leaflet_height'] = [
'label' => &$GLOBALS['TL_LANG']['tl_content']['leaflet_height'],
'inputType' => 'inputUnit',
'options' => ['px', '%', 'em', 'pt', 'pc', 'in', 'cm', 'mm'],
'options' => $GLOBALS['TL_CSS_UNITS'],
'search' => false,
'exclude' => true,
'eval' => ['rgxp' => 'digit', 'tl_class' => 'w50'],

View File

@@ -164,6 +164,7 @@ $GLOBALS['TL_DCA']['tl_leaflet_control'] = [
'maxlength' => 255,
'tl_class' => 'w50',
'nullIfEmpty' => true,
'doNotCopy' => true,
],
'toolkit' => [
'alias_generator' => [

View File

@@ -179,7 +179,14 @@ $GLOBALS['TL_DCA']['tl_leaflet_icon'] = [
['netzmacht.contao_toolkit.dca.listeners.alias_generator', 'handleSaveCallback'],
['netzmacht.contao_leaflet.listeners.dca.validator', 'validateAlias'],
],
'eval' => ['mandatory' => false, 'maxlength' => 255, 'tl_class' => 'w50', 'unique' => true],
'eval' => [
'mandatory' => false,
'maxlength' => 255,
'tl_class' => 'w50',
'unique' => true,
'doNotCopy' => true,
'nullIfEmpty' => true,
],
'toolkit' => [
'alias_generator' => [
'factory' => 'netzmacht.contao_leaflet.definition.alias_generator.factory_default',

View File

@@ -232,12 +232,14 @@ $GLOBALS['TL_DCA']['tl_leaflet_layer'] = [
'provider' => ['tile_provider', 'tile_provider_variant'],
],
'tile_provider' => [
'MapBox' => ['tile_provider_key'],
'HERE' => ['tile_provider_key', 'tile_provider_code'],
'MapBox' => ['tile_provider_key'],
'HERE' => ['tile_provider_key', 'tile_provider_code'],
'OpenWeatherMap' => ['tile_provider_key'],
'Thunderforest' => ['tile_provider_key'],
],
'fileFormat' => [
'!' => ['file'],
],
'fileFormat' => [
'!' => ['file']
]
],
'metasubpalettes' => [
@@ -276,7 +278,14 @@ $GLOBALS['TL_DCA']['tl_leaflet_layer'] = [
['netzmacht.contao_toolkit.dca.listeners.alias_generator', 'handleSaveCallback'],
['netzmacht.contao_leaflet.listeners.dca.validator', 'validateAlias'],
],
'eval' => ['mandatory' => false, 'maxlength' => 255, 'tl_class' => 'w50', 'unique' => true],
'eval' => [
'mandatory' => false,
'maxlength' => 255,
'tl_class' => 'w50',
'unique' => true,
'nullIfEmpty' => true,
'doNotCopy' => true,
],
'toolkit' => [
'alias_generator' => [
'factory' => 'netzmacht.contao_leaflet.definition.alias_generator.factory_default',
@@ -864,7 +873,7 @@ $GLOBALS['TL_DCA']['tl_leaflet_layer'] = [
],
'sql' => 'mediumtext NULL',
],
'fileFormat' => [
'fileFormat' => [
'label' => &$GLOBALS['TL_LANG']['tl_leaflet_layer']['fileFormat'],
'exclude' => true,
'inputType' => 'select',
@@ -882,19 +891,19 @@ $GLOBALS['TL_DCA']['tl_leaflet_layer'] = [
'sql' => "varchar(32) NOT NULL default ''",
],
'file' => [
'label' => &$GLOBALS['TL_LANG']['tl_leaflet_layer']['file'],
'exclude' => true,
'inputType' => 'fileTree',
'label' => &$GLOBALS['TL_LANG']['tl_leaflet_layer']['file'],
'exclude' => true,
'inputType' => 'fileTree',
'load_callback' => [
['netzmacht.contao_leaflet.listeners.dca.layer', 'prepareFileWidget'],
],
'eval' => [
'filesOnly' => true,
'fieldType' => 'radio',
'mandatory' => true,
'tl_class' => 'clr',
'eval' => [
'filesOnly' => true,
'fieldType' => 'radio',
'mandatory' => true,
'tl_class' => 'clr',
],
'sql' => 'binary(16) NULL',
'sql' => 'binary(16) NULL',
],
],
];

View File

@@ -23,6 +23,7 @@ $GLOBALS['TL_DCA']['tl_leaflet_map'] = [
],
'onload_callback' => [
['netzmacht.contao_leaflet.listeners.dca.leaflet', 'loadLanguageFile'],
['netzmacht.contao_leaflet.listeners.dca.map', 'addIncompleteConfigurationWarning'],
],
'onsubmit_callback' => [
['netzmacht.contao_leaflet.listeners.dca.leaflet', 'clearCache'],
@@ -156,7 +157,14 @@ $GLOBALS['TL_DCA']['tl_leaflet_map'] = [
['netzmacht.contao_toolkit.dca.listeners.alias_generator', 'handleSaveCallback'],
['netzmacht.contao_leaflet.listeners.dca.validator', 'validateAlias'],
],
'eval' => ['mandatory' => false, 'maxlength' => 255, 'tl_class' => 'w50', 'unique' => true],
'eval' => [
'mandatory' => false,
'maxlength' => 255,
'tl_class' => 'w50',
'unique' => true,
'doNotCopy' => true,
'nullIfEmpty' => true,
],
'toolkit' => [
'alias_generator' => [
'factory' => 'netzmacht.contao_leaflet.definition.alias_generator.factory_default',

View File

@@ -160,7 +160,14 @@ $GLOBALS['TL_DCA']['tl_leaflet_marker'] = [
['netzmacht.contao_toolkit.dca.listeners.alias_generator', 'handleSaveCallback'],
['netzmacht.contao_leaflet.listeners.dca.validator', 'validateAlias'],
],
'eval' => ['mandatory' => false, 'maxlength' => 255, 'tl_class' => 'w50', 'unique' => true],
'eval' => [
'mandatory' => false,
'maxlength' => 255,
'tl_class' => 'w50',
'unique' => true,
'doNotCopy' => true,
'nullIfEmpty' => true,
],
'toolkit' => [
'alias_generator' => [
'factory' => 'netzmacht.contao_leaflet.definition.alias_generator.factory_default',

View File

@@ -151,7 +151,14 @@ $GLOBALS['TL_DCA']['tl_leaflet_popup'] = [
['netzmacht.contao_toolkit.dca.listeners.alias_generator', 'handleSaveCallback'],
['netzmacht.contao_leaflet.listeners.dca.validator', 'validateAlias'],
],
'eval' => ['mandatory' => false, 'maxlength' => 255, 'tl_class' => 'w50', 'unique' => true],
'eval' => [
'mandatory' => false,
'maxlength' => 255,
'tl_class' => 'w50',
'unique' => true,
'doNotCopy' => true,
'nullIfEmpty' => true,
],
'toolkit' => [
'alias_generator' => [
'factory' => 'netzmacht.contao_leaflet.definition.alias_generator.factory_default',

View File

@@ -145,7 +145,14 @@ $GLOBALS['TL_DCA']['tl_leaflet_style'] = [
['netzmacht.contao_toolkit.dca.listeners.alias_generator', 'handleSaveCallback'],
['netzmacht.contao_leaflet.listeners.dca.validator', 'validateAlias'],
],
'eval' => ['mandatory' => false, 'maxlength' => 255, 'tl_class' => 'w50', 'unique' => true],
'eval' => [
'mandatory' => false,
'maxlength' => 255,
'tl_class' => 'w50',
'unique' => true,
'doNotCopy' => true,
'nullIfEmpty' => true,
],
'toolkit' => [
'alias_generator' => [
'factory' => 'netzmacht.contao_leaflet.definition.alias_generator.factory_default',

View File

@@ -185,7 +185,14 @@ $GLOBALS['TL_DCA']['tl_leaflet_vector'] = [
['netzmacht.contao_toolkit.dca.listeners.alias_generator', 'handleSaveCallback'],
['netzmacht.contao_leaflet.listeners.dca.validator', 'validateAlias'],
],
'eval' => ['mandatory' => false, 'maxlength' => 255, 'tl_class' => 'w50', 'unique' => true],
'eval' => [
'mandatory' => false,
'maxlength' => 255,
'tl_class' => 'w50',
'unique' => true,
'doNotCopy' => true,
'nullIfEmpty' => true,
],
'toolkit' => [
'alias_generator' => [
'factory' => 'netzmacht.contao_leaflet.definition.alias_generator.factory_default',

View File

@@ -49,7 +49,7 @@ $GLOBALS['TL_DCA']['tl_module']['fields']['leaflet_mapId'] = [
$GLOBALS['TL_DCA']['tl_module']['fields']['leaflet_width'] = [
'label' => &$GLOBALS['TL_LANG']['tl_module']['leaflet_width'],
'inputType' => 'inputUnit',
'options' => ['px', '%', 'em', 'pt', 'pc', 'in', 'cm', 'mm'],
'options' => $GLOBALS['TL_CSS_UNITS'],
'search' => false,
'exclude' => true,
'eval' => ['rgxp' => 'digit', 'tl_class' => 'clr w50'],
@@ -60,7 +60,7 @@ $GLOBALS['TL_DCA']['tl_module']['fields']['leaflet_width'] = [
$GLOBALS['TL_DCA']['tl_module']['fields']['leaflet_height'] = [
'label' => &$GLOBALS['TL_LANG']['tl_module']['leaflet_height'],
'inputType' => 'inputUnit',
'options' => ['px', '%', 'em', 'pt', 'pc', 'in', 'cm', 'mm'],
'options' => $GLOBALS['TL_CSS_UNITS'],
'search' => false,
'exclude' => true,
'eval' => ['rgxp' => 'digit', 'tl_class' => 'w50'],

View File

@@ -58,7 +58,7 @@ $GLOBALS['TL_LANG']['tl_leaflet_layer']['groupTypes']['layer']['1'] = 'Ba
$GLOBALS['TL_LANG']['tl_leaflet_layer']['iconCreateFunction']['0'] = 'Cluster-Icon-Funktion erstellen';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['iconCreateFunction']['1'] = 'Diese Funktion wird zum Erstellen des Cluster-Icons benutzt.';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['icons']['0'] = 'Icons verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['icons']['1'] = 'Stile verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['icons']['1'] = 'Icon-Stile verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['map']['0'] = 'Karten verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['map']['1'] = 'Leaflet-Karten verwalten.';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['markerCluster']['0'] = 'Marker-Cluster';
@@ -83,7 +83,7 @@ $GLOBALS['TL_LANG']['tl_leaflet_layer']['pasteafter']['1'] = 'Na
$GLOBALS['TL_LANG']['tl_leaflet_layer']['pasteinto']['1'] = 'In Layer %s einfügen';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['polygonOptions']['0'] = 'Polygon-Optionen';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['popups']['0'] = 'Popups verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['popups']['1'] = 'Popup-Icons verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['popups']['1'] = 'Marker Popups verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['reference']['0'] = 'Referenz';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['reference']['1'] = 'Wählen Sie den Referenzlayer aus. Ansonsten wird dasselbe JavaScript-Objekt benutzt.';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['removeOutsideVisibleBounds']['0'] = 'Entfernen, wenn außerhalb der sichtbaren Begrenzung';

View File

@@ -35,8 +35,8 @@ $GLOBALS['TL_LANG']['tl_leaflet_popup']['delete']['0'] = 'Popup löschen
$GLOBALS['TL_LANG']['tl_leaflet_popup']['delete']['1'] = 'Popup ID %s löschen';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['edit']['0'] = 'Popup bearbeiten';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['edit']['1'] = 'Popup ID %s bearbeiten';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['icons']['0'] = 'Popups verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['icons']['1'] = 'Marker-Popups verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['icons']['0'] = 'Icons verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['icons']['1'] = 'Marker-Icons verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['keepInView']['0'] = 'Im Sichtfeld behalten';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['keepInView']['1'] = 'Aktivieren Sie diese Einstellung um ein herausschieben des Popups aus dem sichbaren Bereich zu verhindern.';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['layersBtn']['0'] = 'Layer verwalten';

View File

@@ -44,7 +44,7 @@ $GLOBALS['TL_LANG']['tl_leaflet_style']['new']['1'] = 'Neuen Stil erstel
$GLOBALS['TL_LANG']['tl_leaflet_style']['opacity']['0'] = 'Linientransparenz';
$GLOBALS['TL_LANG']['tl_leaflet_style']['opacity']['1'] = 'Die Transparenz des Striches kann einen Wert zwischen 0 und 1 annehmen.';
$GLOBALS['TL_LANG']['tl_leaflet_style']['popups']['0'] = 'Popups verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_style']['popups']['1'] = 'Popup-Icons verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_style']['popups']['1'] = 'Popup-Stile verwalten';
$GLOBALS['TL_LANG']['tl_leaflet_style']['show']['0'] = 'Details anzeigen';
$GLOBALS['TL_LANG']['tl_leaflet_style']['show']['1'] = 'Details des Stils ID %s anzeigen';
$GLOBALS['TL_LANG']['tl_leaflet_style']['stroke']['0'] = 'Linie ziehen';

View File

@@ -0,0 +1,15 @@
<?php
/**
* Leaflet maps for Contao CMS.
*
* @package contao-leaflet-maps
* @author David Molineus <david.molineus@netzmacht.de>
* @copyright 2014-2018 netzmacht David Molineus. All rights reserved.
* @license LGPL-3.0 https://github.com/netzmacht/contao-leaflet-maps/blob/master/LICENSE
* @filesource
*/
declare(strict_types=1);
$GLOBALS['TL_LANG']['ERR']['leafletMissingZoomLevel'] = 'No zoom level defined. Only leave it empty on purpose (Zoom level might by initialized by bounds adjustments). Otherwise no map will be shown.';

View File

@@ -21,7 +21,7 @@ $GLOBALS['TL_LANG']['tl_leaflet_layer']['map'][1] = 'Manage leaflet maps';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['icons'][0] = 'Manage icons';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['icons'][1] = 'Manage marker icons';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['popups'][0] = 'Manage popups';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['popups'][1] = 'Manage popups icons';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['popups'][1] = 'Manage popups styles';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['styles'][0] = 'Manage styles';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['styles'][1] = 'Manage vector styles';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['new'][0] = 'Create layer';
@@ -149,6 +149,10 @@ $GLOBALS['TL_LANG']['tl_leaflet_layer']['fileFormat'][0] = 'File
$GLOBALS['TL_LANG']['tl_leaflet_layer']['fileFormat'][1] = 'Choose which file format is used.';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['file'][0] = 'File';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['file'][1] = 'Choose a file containing geodata. Supported formats are: %s.';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['tile_provider_key'][0] = 'API key / Access token';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['tile_provider_key'][1] = 'Please define the API key / access token which is required for this tile provider.';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['tile_provider_code'][0] = 'App code';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['tile_provider_code'][1] = 'Please define the required app code for this tile provider.';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['groupTypes']['layer'][0] = 'Layer group';
$GLOBALS['TL_LANG']['tl_leaflet_layer']['groupTypes']['layer'][1] = 'Basic layer group. <br> See <a href="http://leafletjs.com/reference.html#layergroup" target="_blank">http://leafletjs.com/reference.html#layergroup</a>';

View File

@@ -19,8 +19,8 @@ $GLOBALS['TL_LANG']['tl_leaflet_popup']['layersBtn'][0] = 'Manage layers';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['layersBtn'][1] = 'Manage leaflet layers';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['styles'][0] = 'Manage styles';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['styles'][1] = 'Manage vector styles';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['icons'][0] = 'Manage popups';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['icons'][1] = 'Manage marker popups';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['icons'][0] = 'Manage icons';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['icons'][1] = 'Manage marker icons';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['new'][0] = 'Create popup';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['new'][1] = 'Create new popup';
$GLOBALS['TL_LANG']['tl_leaflet_popup']['edit'][0] = 'Edit popup';

View File

@@ -19,7 +19,7 @@ $GLOBALS['TL_LANG']['tl_leaflet_style']['layersBtn'][1] = 'Manage leaflet layers
$GLOBALS['TL_LANG']['tl_leaflet_style']['icons'][0] = 'Manage icons';
$GLOBALS['TL_LANG']['tl_leaflet_style']['icons'][1] = 'Manage marker icons';
$GLOBALS['TL_LANG']['tl_leaflet_style']['popups'][0] = 'Manage popups';
$GLOBALS['TL_LANG']['tl_leaflet_style']['popups'][1] = 'Manage popups icons';
$GLOBALS['TL_LANG']['tl_leaflet_style']['popups'][1] = 'Manage popups styles';
$GLOBALS['TL_LANG']['tl_leaflet_style']['new'][0] = 'Create style';
$GLOBALS['TL_LANG']['tl_leaflet_style']['new'][1] = 'Create new style';
$GLOBALS['TL_LANG']['tl_leaflet_style']['edit'][0] = 'Edit style';

View File

@@ -1,7 +0,0 @@
<IfModule !mod_authz_core.c>
Order allow,deny
Allow from all
</IfModule>
<IfModule mod_authz_core.c>
Require all granted
</IfModule>

View File

@@ -1,140 +0,0 @@
<div class="netzmacht-leaflet-credits">
<div class="header">
<h1 class="sub_headline"><?php echo $this->headline; ?>
<small><?php echo $this->version; ?></small>
</h1>
</div>
<div class="tl_box block row">
<h2>About</h2>
<div class="left">
<p>
The Leaflet maps integration for Contao CMS is an Open Source Software license under the LGPL 3.0.
This extension is only exists because of great other Open Source Software which it heavenly depends on.
</p>
<p>
This software ships with an visible attribution to <em>netzmacht creative</em> in the map attribution
control.
If you want to remove this attribution, you have to purchase a commercial license.
For more details visit the <a href="https://netzmacht.de/contao-leaflet" target="_blank">project
website</a>.
</p>
</div>
<div class="right">
<a href="http://www.netzmacht.de" target="_blank">
<img src="bundles/netzmachtcontaoleaflet/img/logo.png"></a>
<p>
<strong class="company">netzmacht </strong><br>
David Molineus<br>
</p>
<p>
DAB Bank München<br>
IBAN: DE52701204008354237003<br>
BIC: DABBDEMMXXX
</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="YWMA95YS3FT6U">
<input type="image" src="https://www.paypalobjects.com/en_GB/i/btn/btn_donate_SM.gif" border="0"
name="submit" alt="PayPal The safer, easier way to pay online.">
<img alt="" border="0" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1">
</form>
</div>
</div>
<div class="tl_box">
<h2>Support Contao Leaflet</h2>
<div class="row">
<div class="col">
<h3>Report issues</h3>
<p>If you found a bug, got some troubles or have a feature request - feel free to open an issue.</p>
<p><a href="http://github.com/netzmacht/contao-leaflet-maps/issues" class="btn" target="_blank">Issue
tracker</a></p>
</div>
<div class="col">
<h3>Contribute</h3>
<p>There are many ways you can con&shy;tribute. Translations,
docu&shy;mentation or code contributions are welcome.
</p>
<p><a href="https://netzmacht/contao-leaflet/contribute.html" class="btn" target="_blank">Contribute</a>
</p>
</div>
<div class="col">
<h3>Fund a feature</h3>
<p>Contao Leaflet is not feature complete. Have a look at the list of planned feature and support
them.</p>
<p><a href="https://netzmacht/contao-leaflet/planned-features.html" class="btn" target="_blank">Planned
features</a></p>
</div>
</div>
<div class="row">
<div class="col">
<h3>Individual development</h3>
<p>If you have special requirements you can hire me for an individual development.</p>
<p><a href="https://netzmacht/contao-leaflet/contact.html" class="btn" target="_blank">Contact</a></p>
</div>
<div class="col">
<h3>Commercial license</h3>
<p>If you want to remove the attribution in the attribution control, you can purchase a commercial
license.</p>
<p><a href="https://netzmacht/contao-leaflet/commercial-license.html" class="btn" target="_blank">Purchase
license</a></p>
</div>
</div>
</div>
<div class="tl_box">
<h2>Credits</h2>
<table class="tl_listing">
<tr>
<th>Name</th>
<th>Version</th>
<th>License</th>
<th>Homepage</th>
</tr>
<?php if ($this->libraries): ?>
<tr>
<th colspan="4" class="subtitle">Libraries</th>
</tr>
<?php endif; ?>
<?php foreach ($this->libraries as $library): ?>
<tr>
<td><?php echo $library['name']; ?></td>
<td><?php echo $library['version']; ?></td>
<td><?php echo $library['license']; ?></td>
<td><?php echo $library['homepage']; ?></td>
</tr>
<?php endforeach; ?>
<tr>
<th class="subtitle" colspan="4">Graphics</th>
</tr>
<tr>
<td>Farm Fresh-Web Icons</td>
<td>3.9.2</td>
<td><a href="http://creativecommons.org/licenses/by/3.0/us/" target="_blank">CC BY 3.0 US</a></td>
<td><a href="http://www.fatcow.com/free-icons" target="_blank">fatcow.com/free-icons</a></td>
</tr>
<tr>
<td>Web Blog Icons by SEM Labs</td>
<td>3.9.2</td>
<td><a href="http://creativecommons.org/licenses/by/4.0/" target="_blank">CC BY 4.0</a></td>
<td><a href="http://semlabs.co.uk/" target="_blank">semlabs.co.uk</a></td>
</tr>
<?php if ($this->dependencies): ?>
<tr>
<th colspan="4" class="subtitle">Dependencies</th>
</tr>
<?php endif; ?>
<?php foreach ($this->dependencies as $dep): ?>
<tr>
<td><?php echo $dep['name']; ?></td>
<td><?php echo $dep['version']; ?></td>
<td><?php echo $dep['license']; ?></td>
<td><?php echo $dep['homepage']; ?></td>
</tr>
<?php endforeach; ?>
</table>
</div>
</div>

View File

@@ -1,8 +1,8 @@
<?php $GLOBALS['TL_CSS'][] = 'assets/leaflet/libs/leaflet/leaflet.css'; ?>
<?php $GLOBALS['TL_CSS'][] = 'assets/leaflet/libs/control-geocoder/Control.Geocoder.css'; ?>
<?php $GLOBALS['TL_CSS'][] = 'assets/leaflet/libs/leaflet/leaflet.min.css'; ?>
<?php $GLOBALS['TL_CSS'][] = 'assets/leaflet/libs/control-geocoder/Control.Geocoder.min.css'; ?>
<?php $GLOBALS['TL_JAVASCRIPT'][] = 'assets/leaflet/libs/leaflet/leaflet.js'; ?>
<?php $GLOBALS['TL_JAVASCRIPT'][] = 'assets/leaflet/libs/control-geocoder/Control.Geocoder.js'; ?>
<?php $GLOBALS['TL_JAVASCRIPT'][] = 'assets/leaflet/libs/control-geocoder/Control.Geocoder.min.js'; ?>
<div id="map_<?php echo $this->field; ?>" style="margin-top: 5px; width: calc(100% - 28px); height: 300px"></div>
<script>
@@ -17,6 +17,12 @@
placeholder: '<?php echo $GLOBALS['TL_LANG']['leaflet']['searchPosition']; ?>'
}).addTo(map);
document.querySelector('.leaflet-control-geocoder input').addEventListener('keydown', function (event) {
if (event.keyCode === 13) {
event.preventDefault();
}
});
geocoder.on('markgeocode', function (event) {
var container = document.createElement('div');
var link = document.createElement('button');
@@ -28,7 +34,8 @@
e.stop();
element.set('value', result.center.lat + ',' + result.center.lng);
});
this._geocodeMarker.closePopup();
}.bind(this));
container.appendHTML(result.html || result.name);
container.appendChild(link);

View File

@@ -1,6 +1,6 @@
#tl_navigation .tl_level_1_group .group-leaflet {
background: url(/bundles/netzmachtcontaoleaflet/img/leaflet.svg) 3px 2px no-repeat;
background: url(../img/leaflet.svg) 3px 2px no-repeat;
}
.tl_help_table a {

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,132 @@
{% extends "@ContaoCore/Backend/be_page.html.twig" %}
{% block headline %}{{ "MOD.leaflet_about.1"|trans({}, 'contao_modules') }}{% endblock %}
{% block error %}{% endblock %}
{% block main %}
<div class="netzmacht-leaflet-credits">
<div class="header">
<h1 class="sub_headline">{{ headline }}
<small>{{ version }}</small>
</h1>
</div>
<div class="tl_box block row">
<h2>About</h2>
<p>
The Leaflet maps integration for Contao CMS is an Open Source Software license under the LGPL 3.0.
This extension is only exists because of great other Open Source Software which it heavenly depends on.
</p>
<p>
This software ships with an visible attribution to <em>netzmacht creative</em> in the map attribution
control.
If you want to remove this attribution, you have to purchase a commercial license.
For more details visit the <a href="https://netzmacht.de/contao-leaflet" target="_blank">project
website</a>.
</p>
</div>
<div class="tl_box">
<h2>Support Contao Leaflet</h2>
<div class="row">
<div class="col">
<h3>Report issues</h3>
<p>If you found a bug, got some troubles or have a feature request - feel free to open an issue.</p>
<p><a href="https://github.com/netzmacht/contao-leaflet-maps/issues" class="btn" target="_blank">Issue
tracker</a></p>
</div>
<div class="col">
<h3>Contribute</h3>
<p>There are many ways you can con&shy;tribute. Translations,
docu&shy;mentation or code contributions are welcome.
</p>
<p><a href="https://netzmacht.de/contao-leaflet/contribute.html" class="btn" target="_blank">Contribute</a>
</p>
</div>
<div class="col">
<h3>Fund a feature</h3>
<p>Contao Leaflet is not feature complete. Have a look at the list of planned feature and support
them.</p>
<p><a href="https://github.com/netzmacht/contao-leaflet-maps/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement" class="btn" target="_blank">Planned
features</a></p>
</div>
</div>
<div class="row">
<div class="col">
<h3>Individual development</h3>
<p>If you have special requirements you can hire me for an individual development.</p>
<p><a href="https://netzmacht.de/contao-leaflet/contact.html" class="btn" target="_blank">Contact</a></p>
</div>
<div class="col">
<h3>Commercial license</h3>
<p>If you want to remove the attribution in the attribution control, you can purchase a commercial
license.</p>
<p><a href="https://netzmacht.de/contao-leaflet/commercial-license.html" class="btn" target="_blank">Purchase
license</a></p>
</div>
</div>
</div>
<div class="tl_box">
<h2>Credits</h2>
<table class="tl_listing">
<tr>
<th>Name</th>
<th>Version</th>
<th>License</th>
<th>Homepage</th>
</tr>
{% if libraries %}
<tr>
<th colspan="4" class="subtitle">Libraries</th>
</tr>
{% endif %}
{% for library in libraries %}
<tr>
<td>{{ library.name }}</td>
<td>{{ library.version }}</td>
<td>{{ library.license|raw }}</td>
<td>{{ library.homepage|raw }}</td>
</tr>
{% endfor %}
<tr>
<td>url-polyfill</td>
<td>v1.1.0</td>
<td><a href="https://github.com/lifaon74/url-polyfill/blob/master/LICENSE" target="_blank">MIT</a></td>
<td><a href="https://github.com/lifaon74/url-polyfill" target="_blank">github.com/lifaon74/url-polyfill</a></td>
</tr>
<tr>
<th class="subtitle" colspan="4">Graphics</th>
</tr>
<tr>
<td>Farm Fresh-Web Icons</td>
<td>3.9.2</td>
<td><a href="http://creativecommons.org/licenses/by/3.0/us/" target="_blank">CC BY 3.0 US</a></td>
<td><a href="http://www.fatcow.com/free-icons" target="_blank">fatcow.com/free-icons</a></td>
</tr>
<tr>
<td>Web Blog Icons by SEM Labs</td>
<td>3.9.2</td>
<td><a href="http://creativecommons.org/licenses/by/4.0/" target="_blank">CC BY 4.0</a></td>
<td><a href="http://semlabs.co.uk/" target="_blank">semlabs.co.uk</a></td>
</tr>
{% if dependencies %}
<tr>
<th colspan="4" class="subtitle">Dependencies</th>
</tr>
{% endif %}
{% for dep in dependencies %}
<tr>
<td>{{ dep.name }}</td>
<td>{{ dep.version }}</td>
<td>{{ dep.license|raw }}</td>
<td>{{ dep.homepage|raw }}</td>
</tr>
{% endfor %}
</table>
</div>
</div>
{% endblock %}

View File

@@ -90,7 +90,7 @@ class EncoderSubscriber implements EventSubscriberInterface
$value = $event->getValue();
$encoder = $event->getEncoder();
$template = 'L.contao.%s(%s, %s, %s, %s, map);';
$method = 'loadFile';
$method = 'loadUrl';
if ($value instanceof OmnivoreLayer) {
$url = $value->getUrl();

View File

@@ -93,4 +93,24 @@ class DistanceFilter implements Filter
'center' => $this->center,
];
}
/**
* Get the center coordinate.
*
* @return LatLng
*/
public function getCenter(): LatLng
{
return $this->center;
}
/**
* Get the distance radius.
*
* @return int
*/
public function getRadius(): int
{
return $this->radius;
}
}

View File

@@ -119,6 +119,8 @@ abstract class AbstractMapHybrid extends AbstractHybrid
*/
protected function prepareTemplateData(array $data): array
{
$data = parent::prepareTemplateData($data);
try {
$template = $this->get('leaflet_template') ?: 'leaflet_map_js';
$mapId = $this->getIdentifier();

View File

@@ -0,0 +1,103 @@
<?php
/**
* Leaflet maps for Contao CMS.
*
* @package contao-leaflet-maps
* @author David Molineus <david.molineus@netzmacht.de>
* @copyright 2014-2018 netzmacht David Molineus. All rights reserved.
* @license LGPL-3.0 https://github.com/netzmacht/contao-leaflet-maps/blob/master/LICENSE
* @filesource
*/
declare(strict_types=1);
namespace Netzmacht\Contao\Leaflet\Frontend\Action;
use Netzmacht\Contao\Leaflet\Filter\Filter;
use Netzmacht\Contao\Leaflet\Filter\FilterFactory;
use Netzmacht\Contao\Leaflet\MapProvider;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
/**
* Request action which handles request for layer data
*/
final class LayerDataAction
{
/**
* Map provider.
*
* @var MapProvider
*/
private $mapProvider;
/**
* Filter factory.
*
* @var FilterFactory
*/
private $filterFactory;
/**
* LayerDataAction constructor.
*
* @param MapProvider $mapProvider Map provider.
* @param FilterFactory $filterFactory Filter factory.
*/
public function __construct(MapProvider $mapProvider, FilterFactory $filterFactory)
{
$this->mapProvider = $mapProvider;
$this->filterFactory = $filterFactory;
}
/**
* Handle the request.
*
* @param int $layerId The layer id.
* @param string $_format The requested output format.
* @param Request $request The request.
*
* @return Response
*
* @throws BadRequestHttpException When unsupported format is given.
*
* @SuppressWarnings(PHPMD.CamelCaseParameterName)
* @SuppressWarnings(PHPMD.CamelCaseVariableName)
*/
public function __invoke(int $layerId, string $_format, Request $request): Response
{
$filter = $this->createFilter($request);
$data = $this->mapProvider->getFeatureCollection($layerId, $filter);
if ($_format === 'geojson') {
$response = new JsonResponse($data);
$response->setEncodingOptions(JSON_UNESCAPED_SLASHES);
return $response;
}
throw new BadRequestHttpException(sprintf('Unsupported format "%s"', $_format));
}
/**
* Create the filter if defined in the request.
*
* @param Request $request The request.
*
* @return Filter|null
*/
private function createFilter(Request $request): ?Filter
{
if (!$request->query->has('filter')) {
return null;
}
$filter = (string) $request->query->get('filter');
$values = (string) $request->query->get('values');
return $this->filterFactory->create($filter, $values);
}
}

View File

@@ -12,14 +12,18 @@
namespace Netzmacht\Contao\Leaflet\Frontend;
use const E_USER_DEPRECATED;
use Netzmacht\Contao\Leaflet\Filter\Filter;
use Netzmacht\Contao\Leaflet\Filter\FilterFactory;
use Netzmacht\Contao\Leaflet\MapProvider;
use function trigger_error;
/**
* The data controller handles ajax request for sub data.
*
* @package Netzmacht\Contao\Leaflet\Frontend
*
* @deprecated
*/
class DataController
{
@@ -60,6 +64,13 @@ class DataController
{
$this->debugMode = $debugMode;
$this->filterFactory = $filterFactory;
// @codingStandardsIgnoreStart
@trigger_error(
'Deprecated since 3.1.0 and will be removed in 4.0.0 - Use properly route instead.',
E_USER_DEPRECATED
);
// @codingStandardsIgnoreEnd
}
/**

View File

@@ -0,0 +1,47 @@
<?php
/**
* Leaflet maps for Contao CMS.
*
* @package contao-leaflet-maps
* @author David Molineus <david.molineus@netzmacht.de>
* @copyright 2014-2018 netzmacht David Molineus. All rights reserved.
* @license LGPL-3.0 https://github.com/netzmacht/contao-leaflet-maps/blob/master/LICENSE
* @filesource
*/
declare(strict_types=1);
namespace Netzmacht\Contao\Leaflet\Frontend;
use Netzmacht\Contao\PageContext\Exception\DeterminePageIdFailed;
use Netzmacht\Contao\PageContext\Request\PageIdDeterminator as PageContextPageIdDeterminator;
use Symfony\Component\HttpFoundation\Request;
/**
* Class ApiPageIdDeterminator
*/
final class PageIdDeterminator implements PageContextPageIdDeterminator
{
/**
* {@inheritDoc}
*/
public function match(Request $request): bool
{
return ($request->attributes->get('_leaflet_scope') === 'page' && $request->query->get('context') === 'page');
}
/**
* {@inheritDoc}
*
* @throws DeterminePageIdFailed When no context id is given.
*/
public function determinate(Request $request): int
{
if (!$request->query->has('contextId')) {
throw new DeterminePageIdFailed('Could not determine page id for from request.');
}
return $request->query->getInt('contextId');
}
}

View File

@@ -21,6 +21,8 @@ use Netzmacht\Contao\Leaflet\Mapper\Request;
* Class RequestUrl creates the request url.
*
* @package Netzmacht\Contao\Leaflet\Request
*
* @deprecated
*/
class RequestUrl implements \JsonSerializable
{
@@ -89,6 +91,13 @@ class RequestUrl implements \JsonSerializable
{
$this->url = $url;
$this->hash = $hash;
// @codingStandardsIgnoreStart
@trigger_error(
'Deprecated since 3.1.0 and will be removed in 4.0.0. Use The router instead.',
E_USER_DEPRECATED
);
// @codingStandardsIgnoreEnd
}
/**

View File

@@ -73,6 +73,8 @@ class ValueFilter
*/
public function filter($value)
{
return $this->getReplacer()->replace($value);
$value = $this->getReplacer()->replace($value, false);
return $value;
}
}

View File

@@ -0,0 +1,107 @@
<?php
/**
* Leaflet maps for Contao CMS.
*
* @package contao-leaflet-maps
* @author David Molineus <david.molineus@netzmacht.de>
* @copyright 2014-2018 netzmacht David Molineus. All rights reserved.
* @license LGPL-3.0 https://github.com/netzmacht/contao-leaflet-maps/blob/master/LICENSE
* @filesource
*/
declare(strict_types=1);
namespace Netzmacht\Contao\Leaflet\Listener\Backend;
use Contao\CoreBundle\Event\MenuEvent;
use Netzmacht\Contao\Toolkit\View\Assets\AssetsManager;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\RouterInterface as Router;
use Symfony\Component\Translation\TranslatorInterface as Translator;
/**
* Class BackendMenuListener adds backend entries to the navigation.
*/
final class UserNavigationListener
{
/**
* Request stack.
*
* @var RequestStack
*/
private $requestStack;
/**
* Router.
*
* @var Router
*/
private $router;
/**
* Translator.
*
* @var Translator
*/
private $translator;
/**
* Assets manager.
*
* @var AssetsManager
*/
private $assets;
/**
* BackendUserNavigationListener constructor.
*
* @param RequestStack $requestStack Request stack.
* @param Router $router Router.
* @param Translator $translator Translator.
* @param AssetsManager $assets Assets manager.
*/
public function __construct(
RequestStack $requestStack,
Router $router,
Translator $translator,
AssetsManager $assets
) {
$this->requestStack = $requestStack;
$this->router = $router;
$this->translator = $translator;
$this->assets = $assets;
}
/**
* Handle the event.
*
* @param array $modules Backend navigation modules.
*
* @return array
*/
public function __invoke(array $modules): array
{
if (!isset($modules['leaflet'])) {
return $modules;
}
$request = $this->requestStack->getCurrentRequest();
$isActive = $request && $request->attributes->get('_backend_module') === 'leaflet_about';
$modules['leaflet']['modules']['leaflet_about'] = [
'label' => $this->translator->trans('MOD.leaflet_about.0', [], 'contao_modules'),
'title' => $this->translator->trans('MOD.leaflet_about.1', [], 'contao_modules'),
'href' => $this->router->generate('leaflet_backend_about'),
'icon' => 'bundles/netzmachtcontaoleaflet/img/about.png',
'class' => 'navigation leaflet_about',
'isActive' => $isActive,
];
if ($isActive) {
$this->assets->addStylesheet('bundles/netzmachtcontaoleaflet/css/about.css');
}
return $modules;
}
}

View File

@@ -122,6 +122,7 @@ class LeafletDcaListener
$data['marker'] = json_encode($latLng);
} catch (\Exception $e) {
// LatLng throws an exception of value could not be created. Just let the value empty when.
$data['marker'] = null;
}
return $this->templateEngine->render('toolkit:be:be_leaflet_geocode.html5', $data);

View File

@@ -15,14 +15,18 @@ declare(strict_types=1);
namespace Netzmacht\Contao\Leaflet\Listener\Dca;
use Contao\DataContainer;
use Contao\Input;
use Contao\StringUtil;
use Doctrine\DBAL\Connection;
use Netzmacht\Contao\Leaflet\Model\LayerModel;
use Netzmacht\Contao\Leaflet\Model\MapModel;
use Netzmacht\Contao\Toolkit\Data\Model\RepositoryManager;
use Netzmacht\Contao\Toolkit\Dca\Listener\AbstractListener;
use Netzmacht\Contao\Toolkit\Dca\Manager;
use Netzmacht\Contao\Toolkit\Dca\Options\OptionsBuilder;
use PDO;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Translation\TranslatorInterface as Translator;
/**
* Class Map is the helper class for the tl_leaflet_map dca.
@@ -52,19 +56,70 @@ class MapDcaListener extends AbstractListener
*/
private $repositoryManager;
/**
* Translator.
*
* @var Translator
*/
private $translator;
/**
* Session.
*
* @var Session
*/
private $session;
/**
* Construct.
*
* @param Manager $manager Data container manager.
* @param Connection $connection Database connection.
* @param RepositoryManager $repositoryManager Repository manager.
* @param Translator $translator Translator.
* @param Session $session Session.
*/
public function __construct(Manager $manager, Connection $connection, RepositoryManager $repositoryManager)
{
public function __construct(
Manager $manager,
Connection $connection,
RepositoryManager $repositoryManager,
Translator $translator,
Session $session
) {
parent::__construct($manager);
$this->connection = $connection;
$this->repositoryManager = $repositoryManager;
$this->translator = $translator;
$this->session = $session;
}
/**
* Add warnings for incomplete configurations.
*
* @param DataContainer $dataContainer The data container driver.
*
* @return void
*/
public function addIncompleteConfigurationWarning($dataContainer): void
{
if (Input::get('act') !== 'edit') {
return;
}
$repository = $this->repositoryManager->getRepository(MapModel::class);
$map = $repository->find((int) $dataContainer->id);
if (!$map) {
return;
}
if ($map->zoom === null || $map->zoom === '') {
$this->session->getFlashBag()->add(
'contao.BE.info',
$this->translator->trans('ERR.leafletMissingZoomLevel', [], 'contao_default')
);
}
}
/**

View File

@@ -13,7 +13,6 @@
namespace Netzmacht\Contao\Leaflet\Mapper\Layer;
use Contao\Model;
use Netzmacht\Contao\Leaflet\Frontend\RequestUrl;
use Netzmacht\Contao\Leaflet\Mapper\DefinitionMapper;
use Netzmacht\Contao\Leaflet\Mapper\GeoJsonMapper;
use Netzmacht\Contao\Leaflet\Mapper\Request;
@@ -24,6 +23,7 @@ use Netzmacht\LeafletPHP\Definition;
use Netzmacht\LeafletPHP\Definition\Group\GeoJson;
use Netzmacht\LeafletPHP\Plugins\Omnivore\GeoJson as OmnivoreGeoJson;
use Netzmacht\LeafletPHP\Value\GeoJson\FeatureCollection;
use Symfony\Component\Routing\RouterInterface;
/**
* Class MarkersLayerMapper maps the layer model to the markers definition.
@@ -46,14 +46,23 @@ class MarkersLayerMapper extends AbstractLayerMapper implements GeoJsonMapper
*/
private $repositoryManager;
/**
* Router.
*
* @var RouterInterface
*/
private $router;
/**
* Construct.
*
* @param RepositoryManager $repositoryManager Repository manager.
* @param RouterInterface $router Router.
*/
public function __construct(RepositoryManager $repositoryManager)
public function __construct(RepositoryManager $repositoryManager, RouterInterface $router)
{
$this->repositoryManager = $repositoryManager;
$this->router = $router;
parent::__construct();
}
@@ -93,7 +102,7 @@ class MarkersLayerMapper extends AbstractLayerMapper implements GeoJsonMapper
return [
$this->getElementId($model, $elementId),
RequestUrl::create($model->id, null, null, $request),
$this->generateUrl((int) $model->id, $request),
[],
$layer,
];
@@ -101,7 +110,7 @@ class MarkersLayerMapper extends AbstractLayerMapper implements GeoJsonMapper
return [
$this->getElementId($model, $elementId),
RequestUrl::create($model->id, null, null, $request),
$this->generateUrl((int) $model->id, $request),
];
}
@@ -176,10 +185,37 @@ class MarkersLayerMapper extends AbstractLayerMapper implements GeoJsonMapper
{
$repository = $this->repositoryManager->getRepository(MarkerModel::class);
if ($model->boundsMode == 'fit') {
if ($model->boundsMode === 'fit') {
return $repository->findByFilter($model->id, $request->getFilter());
}
return $repository->findByFilter($model->id);
}
/**
* Generate the data url for a layer.
*
* @param int $layerId The layer id.
* @param Request|null $request The request.
*
* @return string
*
* @SuppressWarnings(PHPMD.Superglobals)
*/
private function generateUrl(int $layerId, ?Request $request = null): string
{
$params = ['layerId' => $layerId];
if ($request && ($filter = $request->getFilter())) {
$params['filter'] = $filter::getName();
$params['values'] = $filter->toRequest();
}
if (isset($GLOBALS['objPage'])) {
$params['context'] = 'page';
$params['contextId'] = $GLOBALS['objPage']->id;
}
return $this->router->generate('leaflet_layer', $params, RouterInterface::ABSOLUTE_URL);
}
}

View File

@@ -14,7 +14,6 @@ namespace Netzmacht\Contao\Leaflet\Mapper\Layer;
use Contao\Model;
use Contao\Model\Collection;
use Netzmacht\Contao\Leaflet\Frontend\RequestUrl;
use Netzmacht\Contao\Leaflet\Mapper\DefinitionMapper;
use Netzmacht\Contao\Leaflet\Mapper\GeoJsonMapper;
use Netzmacht\Contao\Leaflet\Mapper\Request;
@@ -25,6 +24,7 @@ use Netzmacht\LeafletPHP\Definition;
use Netzmacht\LeafletPHP\Definition\Group\GeoJson;
use Netzmacht\LeafletPHP\Plugins\Omnivore\GeoJson as OmnivoreGeoJson;
use Netzmacht\LeafletPHP\Value\GeoJson\FeatureCollection;
use Symfony\Component\Routing\RouterInterface;
/**
* Class VectorsLayerMapper maps the layer model for the Vectors layer definition.
@@ -47,14 +47,23 @@ class VectorsLayerMapper extends AbstractLayerMapper implements GeoJsonMapper
*/
private $repositoryManager;
/**
* Router.
*
* @var RouterInterface
*/
private $router;
/**
* Construct.
*
* @param RepositoryManager $repositoryManager Repository manager.
* @param RouterInterface $router Router
*/
public function __construct(RepositoryManager $repositoryManager)
public function __construct(RepositoryManager $repositoryManager, RouterInterface $router)
{
$this->repositoryManager = $repositoryManager;
$this->router = $router;
parent::__construct();
}
@@ -101,7 +110,7 @@ class VectorsLayerMapper extends AbstractLayerMapper implements GeoJsonMapper
return [
$this->getElementId($model, $elementId),
RequestUrl::create($model->id, null, null, $request),
$this->generateUrl((int) $model->id, $request),
[],
$layer,
];
@@ -109,7 +118,7 @@ class VectorsLayerMapper extends AbstractLayerMapper implements GeoJsonMapper
return [
$this->getElementId($model, $elementId),
RequestUrl::create($model->id, null, null, $request),
$this->generateUrl((int) $model->id, $request),
];
}
@@ -202,4 +211,31 @@ class VectorsLayerMapper extends AbstractLayerMapper implements GeoJsonMapper
$definition->setOnEachFeature(new Expression($model->onEachFeature));
}
}
/**
* Generate the data url for a layer.
*
* @param int $layerId The layer id.
* @param Request|null $request The request.
*
* @return string
*
* @SuppressWarnings(PHPMD.Superglobals)
*/
private function generateUrl(int $layerId, ?Request $request = null): string
{
$params = ['layerId' => $layerId];
if ($request && ($filter = $request->getFilter())) {
$params['filter'] = $filter::getName();
$params['values'] = $filter->toRequest();
}
if (isset($GLOBALS['objPage'])) {
$params['context'] = 'page';
$params['contextId'] = $GLOBALS['objPage']->id;
}
return $this->router->generate('leaflet_layer', $params, RouterInterface::ABSOLUTE_URL);
}
}

View File

@@ -210,6 +210,10 @@ class OptionsBuilder
foreach ($options as $option => $mapping) {
$default = static::getDefaultOption($option, $definition);
if ($model->$mapping === null) {
continue;
}
if ($model->$mapping === '1' || $model->$mapping === '') {
if (((bool) $model->$mapping) !== $default) {
static::applyOption($option, $model->$mapping, $definition);

View File

@@ -71,16 +71,10 @@ class ImageIconMapper extends AbstractIconMapper
Request $request = null,
$elementId = null
) {
$arguments = parent::buildConstructArguments($model, $mapper, $request, $elementId);
if ($model->iconImage) {
$repository = $this->repositoryManager->getRepository(FilesModel::class);
$file = $repository->findByUuid($model->iconImage);
if ($file) {
$arguments[] = $file->path;
}
}
$arguments = parent::buildConstructArguments($model, $mapper, $request, $elementId);
$repository = $this->repositoryManager->getRepository(FilesModel::class);
$file = $repository->findByUuid($model->iconImage);
$arguments[] = $file ? $file->path : '';
return $arguments;
}
@@ -117,8 +111,6 @@ class ImageIconMapper extends AbstractIconMapper
$file = $repository->findByUuid($model->iconImage);
if ($file) {
$definition->setIconUrl($file->path);
$file = new File($file->path);
$definition->setIconSize([$file->width, $file->height]);

View File

@@ -41,6 +41,7 @@ SELECT l.*, c.mode as controlMode
FROM tl_leaflet_layer l
LEFT JOIN tl_leaflet_control_layer c ON l.id = c.lid
WHERE c.cid=?
ORDER BY c.sorting
SQL;
$result = Database::getInstance()
@@ -67,6 +68,7 @@ FROM tl_leaflet_layer l
LEFT JOIN tl_leaflet_control_layer
c ON l.id = c.lid
WHERE c.cid=? AND l.active=1
ORDER BY c.sorting
SQL;
$result = Database::getInstance()

View File

@@ -12,7 +12,9 @@
namespace Netzmacht\Contao\Leaflet\Model;
use Contao\Model\Collection;
use Netzmacht\Contao\Leaflet\Filter\BboxFilter;
use Netzmacht\Contao\Leaflet\Filter\DistanceFilter;
use Netzmacht\Contao\Leaflet\Filter\Filter;
use Netzmacht\LeafletPHP\Value\LatLngBounds;
@@ -33,21 +35,35 @@ class MarkerModel extends AbstractActiveModel
/**
* Find by a filter.
*
* @param int $pid The parent id.
* @param Filter $filter The filter.
* @param int $pid The parent id.
* @param Filter|null $filter The filter.
*
* @return \Contao\Model\Collection|null
* @return Collection|null
*/
public static function findByFilter($pid, Filter $filter = null)
public static function findByFilter($pid, ?Filter $filter = null)
{
if (!$filter) {
return static::findActiveBy('pid', $pid, ['order' => 'sorting']);
$table = static::getTable();
return static::findBy(
[
$table . '.active=1',
$table . '.pid=?',
$table . '.latitude IS NOT NULL',
$table . '.longitude IS NOT NULL',
],
[$pid],
['order' => 'sorting']
);
}
switch ($filter->getName()) {
case 'bbox':
switch (true) {
case $filter instanceof BboxFilter:
return static::findByBBoxFilter($pid, $filter);
case $filter instanceof DistanceFilter:
return static::findByDistanceFilter($pid, $filter);
default:
return null;
}
@@ -59,15 +75,16 @@ class MarkerModel extends AbstractActiveModel
* @param int $pid The layer id.
* @param BboxFilter $filter The bbox filter.
*
* @return \Contao\Model\Collection|null
* @return Collection|null|MarkerModel[]
*/
public static function findByBBoxFilter($pid, BboxFilter $filter)
{
$table = static::getTable();
$columns = [
'active=1',
'pid=?',
'latitude > ? AND latitude < ?',
'longitude > ? AND longitude < ?',
$table . '.active=1',
$table . '.pid=?',
$table . '.latitude > ? AND ' . $table . '.latitude < ?',
$table . '.longitude > ? AND ' . $table . '.longitude < ?',
];
/** @var LatLngBounds $bounds */
@@ -80,6 +97,39 @@ class MarkerModel extends AbstractActiveModel
$bounds->getNorthEast()->getLongitude(),
];
return static::findBy($columns, $values, ['order' => 'sorting']);
return static::findBy($columns, $values, ['order' => $table . '.sorting']);
}
/**
* Find marker by distance filter.
*
* @param int $pid The layer id.
* @param DistanceFilter $filter THe distance filter.
*
* @return Collection|null|MarkerModel[]
*/
public static function findByDistanceFilter($pid, DistanceFilter $filter): ?Collection
{
$table = static::getTable();
$query = <<<SQL
round(
sqrt(
power( 2 * pi() / 360 * (? - {$table}.latitude) * 6371,2)
+ power( 2 * pi() / 360 * (? - {$table}.longitude) * 6371 * COS( 2 * pi() / 360 * (? + {$table}.latitude) * 0.5 ),2)
)
) <= ?
SQL;
$center = $filter->getCenter();
$latitude = $center->getLatitude();
$longitude = $center->getLongitude();
$values = [$pid, $latitude, $longitude, $latitude, $filter->getRadius()];
$columns = [
$table . '.active=1',
$table . '.pid=?',
$query
];
return static::findBy($columns, $values, ['order' => $table . '.sorting']);
}
}