geoproject-app/public/site/plugins/map-editor/index.php
isUnknown 208d46ff28
All checks were successful
Deploy / Build and Deploy to Production (push) Successful in 19s
refactor: one PHP file per route with subdirectories
Properly organize routes following design-to-pack pattern:
- routes/markers/get.php
- routes/markers/create.php
- routes/markers/update.php
- routes/markers/delete.php
- routes/position/update.php
- routes/image/capture.php
- routes/image/check-flag.php
- routes/image/clear-flag.php

Each route in its own file for better maintainability.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 11:58:54 +01:00

82 lines
3.2 KiB
PHP

<?php
/**
* Map Editor Plugin for Kirby CMS
*
* Interactive map editor with MapLibre GL JS for creating
* print-ready maps with markers and rich content.
*/
Kirby::plugin('geoproject/map-editor', [
'fields' => [
'map-editor' => [
'props' => [
'defaultCenter' => function ($defaultCenter = [43.836699, 4.360054]) {
return $defaultCenter;
},
'defaultZoom' => function ($defaultZoom = 13) {
return $defaultZoom;
},
'maxMarkers' => function ($maxMarkers = 50) {
return $maxMarkers;
},
'mode' => function ($mode = 'multi') {
return $mode;
},
'latitude' => function ($latitude = null) {
return $latitude;
},
'longitude' => function ($longitude = null) {
return $longitude;
},
'markerIconUrl' => function ($markerIconUrl = null) {
// Auto-detect marker icon from page files
if ($markerIconUrl === null && $this->model()) {
$iconFile = $this->model()->markerIcon()->toFile();
if ($iconFile) {
return $iconFile->url();
}
}
return $markerIconUrl;
},
'markerIconSize' => function ($markerIconSize = 40) {
// Auto-detect marker icon size from page
if ($this->model() && $this->model()->markerIconSize()->isNotEmpty()) {
return (int) $this->model()->markerIconSize()->value();
}
return $markerIconSize;
}
]
]
],
'api' => [
'routes' => [
require __DIR__ . '/routes/markers/get.php',
require __DIR__ . '/routes/markers/create.php',
require __DIR__ . '/routes/markers/update.php',
require __DIR__ . '/routes/markers/delete.php',
require __DIR__ . '/routes/position/update.php',
require __DIR__ . '/routes/image/capture.php',
require __DIR__ . '/routes/image/check-flag.php',
require __DIR__ . '/routes/image/clear-flag.php',
]
],
'hooks' => [
'page.update:after' => function ($newPage, $oldPage) {
// Mark map page for image regeneration
if ($newPage->intendedTemplate()->name() === 'map') {
$markerFile = $newPage->root() . '/.regenerate-map-image';
file_put_contents($markerFile, time());
}
// If a marker is updated, mark the parent map page for regeneration
if ($newPage->intendedTemplate()->name() === 'marker') {
$mapPage = $newPage->parent();
if ($mapPage && $mapPage->intendedTemplate()->name() === 'map') {
$markerFile = $mapPage->root() . '/.regenerate-map-image';
file_put_contents($markerFile, time());
}
}
}
]
]);