friendsofredaxo / geolocation Goto Github PK
View Code? Open in Web Editor NEWTile-Proxy/Cache und Kartendarstellung mit Leaflet für REDAXO 5.13+
License: MIT License
Tile-Proxy/Cache und Kartendarstellung mit Leaflet für REDAXO 5.13+
License: MIT License
Das muss geprüft werden. @alxndr-w hatte Probleme mit der Installation von Addons, die YForm benötigen, wenn die Instanz im Safe-Mode ist. Der Fall könnte hier auch gegeben sein wegen der YForm-Abhängigkeit.
Also mal Installationen in unterschiedlichen Varianten durchlaufen lassen und schauen, was passiert.
Basierent auf #110:
Grundsätzlich die automatische Auswahl der passenden Tile-URL für Retina- und Non-Retina-Dislays ermöglichen.
Leaflet liefert dazu in der URL im Falle eines Retina-Clients ein r=@2x
mit. Damit der Parameter ankommt, muss die Abruf-Url um &r={r}
erweitert werden.
Alle Tile-URLs, die den Parameter @2x
untetstützen, könnn dann client-seitig je nach Anforderung normale oder hochauflösende Kacheln liefern. Beispiel CartoDB/OSM:
https://cartodb-basemaps-{s}.global.ssl.fastly.net/rastertiles/voyager_labels_under/{z}/{x}/{y}{r}.png
Es gibt auch URL-Provider, die statt dessen die Aufösung über anders geartete Parameter anfordern. Z.B. hat HERE fix 256 oder 512 in der URL stehen. Um den Fall abzudecken könnte man mit zwei URLs arbeiten. Die Standard-URL wird bei normalen Anfragen (r=
) genommen, die Retina-URL bei Anfragen mit r=@2x
.
https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/256/png8?apiKey=....
https://{s}.base.maps.ls.hereapi.com/maptile/2.1/maptile/newest/normal.day/{z}/{x}/{y}/512/png8?apiKey=....
Description / Beschreibung
Obwohl in den Benutzer- und Rollen-Einstellungen das Recht dafür nicht gegeben ist, bekommt der User trotzdem den Menüpunkt von Geolocation angezeigt, was dann bei Klick zu einer Fehlerseite führt, weil ja das Recht dafür nicht vergeben ist...
Workaround für mich wäre ähnlich wie beim bekannten yForm-Bug, das Ganze einfach via boot.php und EP manuell abzuschalten:
if ((rex::isBackend()) && rex::getUser() && (!rex::getUser()->isAdmin())) {
rex_extension::register('PAGES_PREPARED', function (rex_extension_point $ep) {
$page = rex_be_controller::getPageObject('yform');
$page->setHidden(true);
});
}
Affected versions / Verwendete Versionen
REDAXO: 5.14.2
PHP: 8.1.13
Database: MariaDB 10.5.18
Browser: egal
AddOns: egal
In YForm 4.2 gibt es ggü der Beta Änderungen, die Speichern der Layter-Datensätze behindert. Details zum Problem hier:
yakamara/yform#1480
Nichts das es eilig wäre, könnte man aber auch mal angehen. Evt. vereinfachen sich einige darauf aufsetzende Berechnungen im eigenen Geolocation-Code.
Es geht um die \FriendsOfRedaxo\Geolocation\tools::echoAssetTags() Funktion
rex_path::addonAssets(ADDON, 'geolocation.min.css')
ergibt bei mir:
"D:\weblocal\xxxxx\public\assets\addons\geolocation\geolocation.min.css"
und dein assetpacker macht daraus:
http://xxxxx.local/public/assets/addons/geolocation/geolocation.min.css?buster=1681812590
Nur dass das "public" da nichts zu suchen hat, weil es das webroot ist.
Beide bringen Leaflet mit, das kracht aus JS-Ebene. Würde sich mit #28 und einer neuen Version von yform_geo_osm lösen. Könnte man b.a.w. in der package.yml lösen:
conflicts:
packages:
yform_geo_osm: '>0.0.0'
Und Hinweise in der README.md, docs/install.md sowie im Installer.
Nur mal so als Idee. Karten und Mapsets in den URLs nicht über die Datensatz-ID referenzieren, sondern über eine UUID.
Technisch ist das kein großes Ding. Beim Update das neue UUID-Feld hinzufügen und fehlende UUID-Einträge erzeugen. Die Nutzung sollte eh über generierten Code erfolgen. Nur wer die Proxy-Urls von Hand fest in sein JS gebaut hat, muss etwas umbasteln.
Vieleicht könnte man auf die Art auch mal einen Pool an Karten- und Service-URLs aufbauen, die bei jedem Update automatisch ausgeliefert und mit eingespielt werden.
Feature description / Feature Beschreibung
Darkmode-Karten simulieren per CSS-Style auf dem Kartenkontainer (<rex-map>
).
<rex-map>
) und damit für Karte und alles was darauf positioniert ist?man muss ja bedenken, dass es Anbieterseits auch Nacht-Karten als Alternative zur normalen Karte gibt. Das würde dann bedeuten, je Karte auszuwählen zwischen (1) kein DM, (2) DM per CSS und (3) DM per alternativer Karte.
Referenz / Credits:
Oliver Kreischer: ich hab farbige mit einem css Filter in Graustufen verwandelt. Das geht doch bestimmt auch im Dunkeln
Andreas Lenhardt: du gibst der karte den css stil: filter: invert(1) hue-rotate(180deg);
(damit kann man alles mit einem darkmode versehen :leichtes_lächeln: )
von @tyrant88 bemerkt: auf einem Windows-System sieht man an den Backslashes, dass hier aus einem Dateipfad eine URL erzeugt wurde...
Richtig schön ist das nicht.
Stimmt. Bei Gelegenheit ändern.
Die Karten-Provider haben auch Service-URLs, mit denen z.B. Adressauflösung (Koordinaten zur Adresse) oder Umkreissuchen (was ist im Umkreis von ...) möglich sind. Die Rückgabe ist meist ein JSON-Record, der aber inhaltlich nicht bei jedem Anbieter gleich aufgebaut ist.
Dass ließe sich ähnlich wie die Karten einbauen:
Description / Beschreibung
Affected versions / Verwendete Versionen
REDAXO | |
---|---|
Version | 5.17.1 |
PHP | |
---|---|
Version | 8.3.0 |
OPcache | no |
Xdebug | no |
Database | |
---|---|
Version | MySQL 5.7.39 |
Character set | utf8mb4 |
Warning | Die verwendete MySQL-Version 5.7.39 wird nicht mehr vom Hersteller gepflegt und sollte aktualisiert werden. |
Server | |
---|---|
OS | Darwin |
SAPI | cgi-fcgi |
Webserver | Apache/2.4.54 |
Request | |
---|---|
Browser | Safari/17.0 |
Protocol | HTTP/1.1 |
HTTPS | yes |
Packages | |
---|---|
accessdenied | 2.1.0 |
activity_log | 0.1.0 |
adminer | 2.0.2 |
backup | 2.9.1 |
base | 0.0.1 |
base/documentation | 1.0 |
base_jobportal | 0.0.1 |
base_news | 0.0.1 |
be_password | 2.0.1 |
be_style | 3.4.1 |
be_style/customizer | 3.3.1 |
be_style/redaxo | 3.4.1 |
bloecks | 4.0.2 |
bloecks/cutncopy | 4.0.2 |
cke5 | 6.1.0 |
cronjob | 2.11.0 |
cronjob/article_status | 2.10.0 |
debug | 1.3.2 |
developer | 3.9.2 |
focuspoint | 4.2.2 |
geolocation | 2.2.0 |
gridblock | 1.1.13 |
gridblock/contentsettings | 1.7.1 |
gridblock/synchronizer | 1.0 |
httpheader | 1.1.3 |
install | 2.12.1 |
maintenance | 2.9.2 |
mblock | 3.4.13 |
media_manager | 2.16.0 |
media_negotiator | 4.0.4 |
mediapool | 2.14.0 |
metainfo | 2.11.0 |
mform | 7.4.4 |
phpmailer | 2.13.1 |
project | dev |
quick_navigation | 8.0.0-beta1 |
rexstan | 1.0.170 |
sprog | 1.5.1 |
structure | 2.17.1 |
structure/content | 2.17.1 |
theme | 1.4.0 |
uploader | 2.4.2 |
url | 2.1.0 |
users | 2.11.0 |
watson | 2.3.0 |
yform | 4.2.1 |
yform/email | 4.2.1 |
yform/manager | 4.2.1 |
yform/tools | 4.2.1 |
yform_spam_protection | 1.2.4 |
yform_usability | 2.1.4 |
yrewrite | 2.10.0 |
Nur mal so in den Raum gestellt und weil ich grade das Addon mit RexStan durchflöhe und dabei nur PHP 8.0 / 8.1 / 8.2 teste:
Was haltet ihr davon, das nächste (Major-)Release an PHP 8.0 zu koppeln. Oder gleich 8.1. Man muss ja mal anfangen ....
In der Doku den JS-Kopf mit den Default-Werten prüfen; da fehlt wohl noch was.
Weil man ja zuerst noch nen API-Key für HERE besorgen muss, würde das Anfänger-Frust vermeiden.
Description / Beschreibung
AddOn geolocation konnte aus folgendem Grund nicht installiert werden:
Fehler beim Import der YForm-Formulare: «Error while executing statement "ALTER TABLE rex_yform_field
ADD validate_type
TEXT NOT NULL" using params []! SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'validate_type'»
Affected versions / Verwendete Versionen
REDAXO: 5.15.0
PHP: 8.2.7
AddOns: Form 4.1.0
ErrorException: Undefined variable: mapset
File: redaxo/src/addons/geolocation/lib/yform/dataset/mapset.php
Line: 265
Function | File | Line |
---|---|---|
rex_error_handler::handleError | redaxo/src/addons/geolocation/lib/yform/dataset/mapset.php | 265 |
Geolocation\mapset->getLayerset | redaxo/src/addons/geolocation/lib/yform/dataset/mapset.php | 434 |
Geolocation\mapset->parse | rex:///module/39/output | 21 |
require | redaxo/src/addons/structure/plugins/content/lib/article_content_base.php | 516 |
rex_article_content_base->{closure} | redaxo/src/addons/structure/plugins/content/lib/article_content_base.php | 518 |
rex_article_content_base->getStreamOutput | redaxo/src/addons/structure/plugins/content/lib/article_content_editor.php | 272 |
rex_article_content_editor->getWrappedModuleOutput | redaxo/src/addons/structure/plugins/content/lib/article_content_editor.php | 85 |
rex_article_content_editor->outputSlice | redaxo/src/addons/structure/plugins/content/lib/article_content_base.php | 720 |
rex_article_content_base->renderSlices | redaxo/src/addons/structure/plugins/content/lib/article_content_base.php | 428 |
rex_article_content_base->getArticle | redaxo/src/addons/structure/plugins/content/lib/article_content.php | 105 |
rex_article_content->getArticle | redaxo/src/addons/structure/plugins/content/pages/content.edit.php | 35 |
include | redaxo/src/core/lib/packages/package.php | 285 |
rex_package->includeFile | redaxo/src/core/lib/be/controller.php | 485 |
rex_be_controller::{closure} | redaxo/src/core/lib/util/timer.php | 63 |
rex_timer::measure | redaxo/src/core/lib/be/controller.php | 486 |
rex_be_controller::includePath | redaxo/src/core/lib/be/controller.php | 432 |
rex_be_controller::includeCurrentPageSubPath | redaxo/src/addons/structure/plugins/content/pages/content.php | 432 |
include | redaxo/src/core/lib/packages/package.php | 285 |
rex_package->includeFile | redaxo/src/core/lib/be/controller.php | 485 |
rex_be_controller::{closure} | redaxo/src/core/lib/util/timer.php | 63 |
rex_timer::measure | redaxo/src/core/lib/be/controller.php | 486 |
rex_be_controller::includePath | redaxo/src/core/lib/be/controller.php | 415 |
rex_be_controller::includeCurrentPage | redaxo/src/core/backend.php | 238 |
require | redaxo/src/core/boot.php | 143 |
require | redaxo/index.php | 9 |
REDAXO | |
---|---|
Version | 5.13.1 |
PHP | |
---|---|
Version | 7.4.26 |
OPcache | yes |
Xdebug | yes |
Database | |
---|---|
Version | MariaDB 10.2.39 |
Character set | utf8mb4 |
Hintergrund: es gibt im JS eine Funktion, die farbige Marker als Inline-SVG erzeugt. Der erzeugte Code ist escaped, also z.B. "
ist durch %22
ersetzt. Die an die Funktion übergebenen Farbnamen (z.B. green
) werden auch klaglos richtig in den Code eingesetzt. Mit Farbcodes (z.B. `#008800') geht das schief.
Aktueller Workaround: Farbcodes als %23....
(z.B. %23008800
) selbst escapen.
Für die nächste Version das JS selbst escapen lassen.
Püfen und ggf. anheben anlässlich der wegen REDAXO 5.13 und YForm 4.0 erforderlichen neuen Version
Bisher wird die erste Karte in der Liste der Basiskarten automatisch aktiviert. Overlay-Karten sind per se ausgeblendet und müssen immer selbst aktiviert werden.
Das ist nicht so toll, wenn man z.B. Overlay-Informationen als wesentlichen Kartenteil direkt sichtbar haben möchte.
Lösungsansatz: das Anzeige-Widget erweitern um Checkboxen (Overlay-Karten) oder Radio-Boxen (Basiskarten)
Da gibt es demnächst was zu tun. Erstmal ist nur die erste Beta-Version raus.
https://github.com/Leaflet/Leaflet/releases/tag/v1.8.0-beta.0
Description / Beschreibung
https://github.com/FriendsOfREDAXO/geolocation/blob/master/lib/yform/dataset/Mapset.php#L498
sammelt die Karteninhalte ein (siehe Geolocation.js -> Tools).
Diese Datei scheint es nicht zu geben.
Eigentlich wollte ich nachsehen, was die 10 hier genau bedeutet:
echo Mapset::take($mapSetId)
->dataset('center', [[$latitude, $longitude], 10])
Affected versions / Verwendete Versionen
REDAXO: 5.14.2
PHP: 8.1
Geolocation 2.0.0-beta2
Addon kann nicht installiert und verursacht beim Versuch immer einen Speicherüberlauf.
Allowed memory size of 134217728 bytes exhausted (tried to allocate 67092480 bytes)
07.02.2022, 10:18:59
Warning
tempnam(): open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (/home/www/web3/)
redaxo/src/addons/geolocation/install.php
111
07.02.2022, 10:18:59
Warning
unlink(): open_basedir restriction in effect. File() is not within the allowed path(s): (/home/www/web3/)
redaxo/src/addons/geolocation/install.php
110
07.02.2022, 10:18:59
Warning
rename(): open_basedir restriction in effect. File() is not within the allowed path(s): (/home/www/web3/)
redaxo/src/addons/geolocation/install.php
109
Das war mal in der Doku, ist wohl rausgefallen
In LICENCE.md und package.yml steht noch mein Name. Gegen FOR austauschen
Werde ich testen und berichten
Ich gehe jetzt mal Stück für Stück ran, die Analyse-Ergebnisse aus RextStan umzusetzen. Das gibt eine ganze Reihe von PRs, die ich dann mit dem Label RexStan markiere. Bitte daraus noch kein Release machen, da es sich am Ende auch um Breaking Changes handeln wird.
Im Formular für den Mapset sind zwei Felder (...geolocation_layerselect extends ... be_manager_relation
), die das vom Erbonkel rex_yform_value_be_manager_relation
erzeugte HTML (ein Widget) etwas umbauen. Grund: die darin befindlichten SELECT-OPTIONS dürfen um HTML-konform zu sein kein komplexes HTML enthalten. Das Select wird daher durch eine List-group ersetzt.
Seit YForm 4.2 klappt das nicht mehr, denn der Widget-Aufbau wurde geändert.
Lösung ist in Arbeit. Geplant: rex_yform_geolocation_layerselect
baut das HTML komplett selbst auf und basiert nicht mehr auf be_manager_relation.
Im Tab für Kartensätze wird ja eine YForm-Tabelle angezeigt. Die Spalte "Funktion" mit den Action-Buttons wird per EP verändert, indem eine Custom-Function darauf gesetzt wird. Bis dahin kein Problem.
Es könnte ja sein, dass ein Entwickler zusätzliche Hilfsfunktionen über das Menü einbauen will. Beim herkömmlichen $list->setCustomFormat()
gilt: der letzte gewinnt. Also würde das Callback von Geolocation ein zuvor gesetztes Callback überschreiben.
Dem kann man gegensteuern, indem vor dem $list->setCustomFormat()
erst einmal ermittelt wird, ob es ein Callback gibt. Und im eigenen Callback wird zuerst dieses vorherige Callback aufgerufen ...
PR folgt und sollte den Weg in das finale Release 2.0 finden
TypeError: Cannot access offset of type string on string
File: redaxo/src/addons/yform/plugins/manager/fragments/yform/manager/page/list.php
Line: 152
in Verbindung mit yForm 4.0.4
Function | File | Line |
---|---|---|
require | redaxo/src/core/lib/fragment.php | 119 |
rex_fragment->{closure} | redaxo/src/core/lib/util/timer.php | 56 |
rex_timer::measure | redaxo/src/core/lib/fragment.php | 122 |
rex_fragment->parse | redaxo/src/addons/yform/plugins/manager/fragments/yform/manager/page/layout.php | 20 |
require | redaxo/src/core/lib/fragment.php | 119 |
rex_fragment->{closure} | redaxo/src/core/lib/util/timer.php | 56 |
rex_timer::measure | redaxo/src/core/lib/fragment.php | 122 |
rex_fragment->parse | redaxo/src/addons/yform/plugins/manager/lib/yform/manager/table.php | 258 |
rex_yform_manager_table->parseLayout | redaxo/src/addons/yform/plugins/manager/lib/yform/manager.php | 736 |
rex_yform_manager->getDataPage | redaxo/src/addons/yform/plugins/manager/pages/data_edit.php | 20 |
include | redaxo/src/addons/geolocation/pages/yform.php | 58 |
require | redaxo/src/core/lib/packages/package.php | 233 |
rex_package->includeFile | redaxo/src/core/lib/be/controller.php | 503 |
rex_be_controller::{closure} | redaxo/src/core/lib/util/timer.php | 56 |
rex_timer::measure | redaxo/src/core/lib/be/controller.php | 504 |
rex_be_controller::includePath | redaxo/src/core/lib/be/controller.php | 453 |
rex_be_controller::includeCurrentPageSubPath | redaxo/src/addons/geolocation/pages/index.php | 83 |
require | redaxo/src/core/lib/packages/package.php | 233 |
rex_package->includeFile | redaxo/src/core/lib/be/controller.php | 503 |
rex_be_controller::{closure} | redaxo/src/core/lib/util/timer.php | 56 |
rex_timer::measure | redaxo/src/core/lib/be/controller.php | 504 |
rex_be_controller::includePath | redaxo/src/core/lib/be/controller.php | 436 |
rex_be_controller::includeCurrentPage | redaxo/src/core/backend.php | 241 |
require | redaxo/src/core/boot.php | 155 |
require | redaxo/index.php | 9 |
REDAXO | |
---|---|
Version | 5.15.0 |
PHP | |
---|---|
Version | 8.1.16 |
OPcache | yes |
Xdebug | no |
Database | |
---|---|
Version | MariaDB 10.6.12 |
Character set | utf8mb4 |
Warning | Die verwendete MariaDB-Version 10.6.12 wird nicht mehr vom Hersteller gepflegt und sollte aktualisiert werden. |
Server | |
---|---|
OS | Linux |
SAPI | fpm-fcgi |
Webserver | Apache |
Request | |
---|---|
Browser | Safari/16.3 |
Protocol | HTTP/1.0 |
HTTPS | yes |
Packages | |
---|---|
adminer | 1.9.3 |
animatedlogin | 1.0.0 |
backup | 2.9.0 |
be_style | 3.2.0 |
be_style/customizer | 3.2.0 |
be_style/redaxo | 3.2.0 |
bloecks | 3.1.1 |
bloecks/cutncopy | 3.1.1 |
bloecks/dragndrop | 3.1.1 |
cke5 | 5.2.0 |
collect | 0.0.7-dev |
collect/rss | 0.0.1-dev |
collect/vimeo | 0.0.1-dev |
cronjob | 2.10.0 |
debug | 1.3.0 |
fa_iconpicker | 1.2.0 |
feeds | 4.0.1 |
flatpickr | 1.1.1 |
focuspoint | 4.0.3 |
for_sa11y | 0.1.0 |
forcal | 3.7.3 |
geolocation | 2.0.0-beta2 |
global_settings | 2.8.4 |
icecoder | 3.0.1 |
install | 2.11.0 |
maintenance | 2.9.1 |
mblock | 3.4.11 |
media_manager | 2.14.0 |
media_negotiator | 2.0.0 |
mediapool | 2.13.0 |
metainfo | 2.10.0 |
mform | 7.2.7 |
mform/docs | 1.1 |
minibar | 2.3.1 |
navigation_array | 1.2.1 |
phpmailer | 2.12.0 |
plyr | 3.20.5 |
project | 0.0.1 |
quick_navigation | 6.0.2 |
sprog | 1.5.1 |
statistics | 2.4.0 |
structure | 2.15.0 |
structure/content | 2.15.0 |
theme_lock | 1.0.0 |
uikit_collection | 3.2.1 |
uploader | 2.3.0 |
url | 2.1.0 |
users | 2.10.0 |
watson | 2.3.0 |
yform | 4.0.4 |
yform/email | 4.0.4 |
yform/manager | 4.0.4 |
yform_geo_osm | 1.2.8 |
yform_mediafile | 1.0.1' |
yrewrite | 2.9.1 |
yrewrite_scheme | 3.6.2 |
zip_install | 1.2 |
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.