Files
MokoSuiteStoreLocator/README.md
T
Jonathan Miller 7ef9a23ef8
Universal: Auto Version Bump / Version Bump (push) Successful in 9s
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Blocked by required conditions
Joomla: Extension CI / PHPStan Analysis (pull_request) Blocked by required conditions
Joomla: Extension CI / Build RC Pre-Release (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Universal: PR Check / Branch Policy (pull_request) Failing after 2s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 6s
Generic: Repo Health / Access control (pull_request) Successful in 3s
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: PR Check / Validate PR (pull_request) Failing after 6s
Universal: PR Check / Secret Scan (pull_request) Successful in 7s
Universal: Build & Release / Promote to RC (pull_request) Failing after 15s
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Joomla: Extension CI / Lint & Validate (pull_request) Successful in 38s
Joomla: Metadata Validation / Validate Joomla Metadata (pull_request) Successful in 43s
feat: v1.1 competitive parity — proximity search, directions, geocoding, CSV import
Haversine proximity search:
- LocationsModel filters by distance using Haversine formula
- populateState captures lat/lng/radius/radius_unit from search form
- Distance-sorted results when proximity filter is active
- Hidden radius_unit field added to search module form

Get Directions:
- Google Maps directions link on location detail page (no API key)
- Directions link in Leaflet popup markers

Auto-geocoding:
- LocationModel::save() override auto-geocodes empty coordinates
- Calls Nominatim/OSM API when address present but coords missing
- Success/failure messages via Joomla enqueueMessage

CSV Import:
- ImportController handles file upload with CSRF token check
- ImportModel parses CSV via SplFileObject with configurable delimiter
- Auto-detects column headers (title/name, address/street, city, etc.)
- Per-row validation via LocationTable::bind()->check()->store()
- Import view with upload form, delimiter picker, and column help
- Toolbar button and submenu item for import access

Addresses #54

Authored-by: Moko Consulting
2026-06-23 11:50:02 -05:00

2.3 KiB

MokoSuiteStoreLocator

A Joomla 4/5 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

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
  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
  • Site frontend — locations list and detail views with pagination
  • 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
  • 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

Planned

  • Marker clustering for dense location areas
  • Multi-category support with custom map markers
  • ACL permissions and SQL upgrade schema
  • REST API via Joomla Web Services plugin
  • MokoSuiteShop integration for multi-store ecommerce

Development

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