# 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