32b541597a
- Add Leaflet map to location detail page with marker and popup (#57) - Implement Leaflet.markercluster with toggleable module parameter (#61) - Convert inline <script> to $wa->addInlineScript() for CSP nonce support (#34) - Replace category INNER JOIN with EXISTS subquery for ONLY_FULL_GROUP_BY compat (#59) - Add delete() override to LocationTable and CategoryTable for junction cleanup (#60) - Drop dead catid column and idx_catid index via SQL update 01.00.02 (#58) - Update CHANGELOG and README Authored-by: Moko Consulting
70 lines
3.3 KiB
Markdown
70 lines
3.3 KiB
Markdown
# MokoSuiteStoreLocator
|
|
|
|
A Joomla 5/6 package providing a store locator listing component with coordinating map and search modules.
|
|
|
|
## Package Contents
|
|
|
|
| Extension | Type | Element |
|
|
|---|---|---|
|
|
| Store Locator Component | component | `com_mokosuitestorelocator` |
|
|
| Store Locator Map | module (site) | `mod_mokosuitestorelocator_map` |
|
|
| Store Locator Search | module (site) | `mod_mokosuitestorelocator_search` |
|
|
| Web Services API | plugin (webservices) | `plg_webservices_mokosuitestorelocator` |
|
|
|
|
## Requirements
|
|
|
|
- Joomla 5.x or 6.x
|
|
- PHP 8.2+
|
|
- MySQL 8.0+ / MariaDB 10.4+
|
|
|
|
## Installation
|
|
|
|
1. Download the latest `pkg_mokosuitestorelocator-x.x.x.zip` from [Releases](https://git.mokoconsulting.tech/MokoConsulting/MokoSuiteStoreLocator/releases)
|
|
2. In Joomla Administrator, go to **System > Install > Extensions**
|
|
3. Upload the package ZIP — all extensions install automatically
|
|
|
|
## Features
|
|
|
|
### Implemented
|
|
- **Admin CRUD** — full location management with tabbed edit form (details, address, coordinates, contact, image)
|
|
- **Admin list** — searchable, filterable, sortable locations list with bulk publish/unpublish/delete
|
|
- **Multi-category** — categories with parent/child hierarchy, color, custom marker icons, many-to-many assignments
|
|
- **Custom map markers** — per-category SVG/PNG marker icons on the Leaflet map
|
|
- **Site frontend** — locations list and detail views with pagination and category filtering
|
|
- **Schema.org** — LocalBusiness structured data markup on all frontend templates
|
|
- **SEF URLs** — router with menu, standard, and nomenu rules
|
|
- **Menu items** — "All Locations" list and single "Location Detail" picker
|
|
- **Interactive map** — Leaflet.js with OpenStreetMap tiles, markers with popups, auto-fit bounds, marker clustering
|
|
- **Location search** — city dropdown, radius filter, and browser geolocation ("Use My Location")
|
|
- **Proximity search** — Haversine distance filtering with distance-sorted results
|
|
- **Get Directions** — Google Maps directions link on detail page and map popups
|
|
- **Auto-geocoding** — coordinates auto-populated from address on save (Nominatim/OSM)
|
|
- **CSV import** — bulk-create locations from spreadsheet with auto-detected column mapping
|
|
- **FocalPoint migration** — one-click import from Shack Locations / FocalPoint
|
|
- **REST API** — JSON:API endpoints via Joomla Web Services plugin
|
|
- **ACL permissions** — `access.xml` with standard Joomla permission actions
|
|
- **SQL update schema** — versioned migration files for safe upgrades
|
|
- **Shop integration** — `LocationBridgeHelper` for cross-extension data access, `LocationSavedEvent` for cache invalidation
|
|
- **Detail page map** — Leaflet map on single location view with marker and popup
|
|
- **Marker clustering** — Leaflet.markercluster groups nearby markers at low zoom levels (toggleable)
|
|
- **Security hardening** — CSV injection prevention, MIME validation, ORDER BY allowlists, CSP-compatible inline scripts
|
|
- **Junction cleanup** — orphan rows automatically removed when locations or categories are deleted
|
|
|
|
### Planned
|
|
- Google Maps provider as alternative to Leaflet
|
|
- CSV export
|
|
- Photo gallery per location
|
|
- Address autocomplete on admin edit form
|
|
|
|
## Development
|
|
|
|
```bash
|
|
composer install # Install PHP dev dependencies
|
|
```
|
|
|
|
Source code lives in `source/packages/` — one directory per sub-extension.
|
|
|
|
## License
|
|
|
|
GPL-3.0-or-later — Moko Consulting
|