feat: core store locator implementation (dev release) #28

Closed
jmiller wants to merge 3 commits from feature/initial-implementation into main

3 Commits

Author SHA1 Message Date
Jonathan Miller dd90c3ee91 feat(component): implement high-priority issues #8-#12
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 3s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 3s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 4s
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Has been skipped
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Has been skipped
Joomla: Extension CI / PHPStan Analysis (pull_request) Has been skipped
Universal: PR Check / Validate PR (pull_request) Successful in 16s
Geocoding (#12):
- Geocoder helper with Nominatim (free default) and Google API
- Auto-geocode on save when address present but no coordinates
- Batch geocoding support for imports
- Component params for provider selection and API key

Geolocation (#9):
- "Use My Location" button with browser Geolocation API
- Permission handling (denied, unavailable, timeout states)
- Auto-selects first radius option on location detection
- Status messages with auto-dismiss

Import (#10):
- CSV import controller with column mapping
- Geocode option during import
- Update-existing option (match by title)
- Import view with file upload form
- CSV template download

Export (#11):
- CSV export controller with filter support
- UTF-8 BOM for Excel compatibility
- Export button on locations list toolbar

Get Directions (#8):
- Links in map popups and list/detail views
- Opens Google Maps directions with destination coords
- "Get Directions" button on location detail page

Sample Data:
- 8 Tennessee store locations with real coordinates
- Inject via admin toolbar button
- Duplicate prevention by alias check

Also: component config for geocoding, import submenu, toolbar
buttons for export/sample data.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 15:28:12 -05:00
Jonathan Miller f2afe8e9d9 feat(component): complete core MVC, map rendering, and router
Admin:
- LocationController (FormController for save/edit/cancel)
- LocationsController (AdminController for publish/delete/ordering)
- Location edit view with tabbed form and Leaflet coordinate picker
- Component extension implements RouterServiceInterface

Frontend:
- Single location detail view with Schema.org JSON-LD
- SEF URL router (locations list + location detail by alias)
- Location detail template with map, contact info, directions
- Locations list now links to detail pages with distance display

Map module:
- Full Leaflet.js rendering with OpenStreetMap tiles
- MarkerCluster plugin for dense marker areas
- DOM-based popup content (XSS-safe, no innerHTML)
- Google Maps provider with clustering support
- Auto-fit bounds to show all markers
- "Get Directions" link in popups

Package:
- Post-install script enables bundled modules automatically
- Fixed .gitignore to allow src/**/site/ paths

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 15:16:44 -05:00
Jonathan Miller d0b9a40157 feat(component): implement core logic for models, table, and templates
- LocationTable: alias generation, lat/lng validation, timestamps
- Admin LocationsModel: filters for published, category, search, ordering
- Site LocationsModel: search, city/state filter, Haversine radius search
- Admin list template: render location rows with edit links
- Map module dispatcher: load locations with coordinates for markers
- Search module dispatcher: distinct cities/states, radius options
- Site template: website, hours, image display with Schema.org

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-21 11:55:13 -05:00