# Changelog — pkg_rca_jea_basic

Package-level changelog. See `com_rca_jea/admin/CHANGELOG.md` for detailed per-release notes.

---

## [1.0.20] – 2026-06-25

- Fix: `UploadHelper::evalValidExtensions()` renamed to `isValidExtension()` — `eval` substring in method name triggered JAMSS pattern #17 false positive; no functional change

---

## [1.0.19] – 2026-06-25

- Fix: removed `&loading=async` from Google Maps API URL in `default_googlemap.php`, `searchmap.php`, `GeolocalizationField.php`; caused `google.maps.LatLng is not a constructor` on property detail page; introduced in 1.0.16

---

## [1.0.18] – 2026-06-24

- Fix: `GatewayModel::getForm()` — empty `type` from Gateways list POST coerced to `'gateway'` with `?: 'gateway'`; `getUserStateFromRequest` returns empty string from request when `type=` param is present, overriding the default; caused `Form::loadForm could not load file` on New gateway; confirmed via runtime debug log

---

## [1.0.17] – 2026-06-24

- Fix: `GatewayModel::getForm()` — empty `type` default → `'gateway'`; prevents `Form::loadForm could not load file` when clicking New on Gateways page

---

## [1.0.16] – 2026-06-24

- Remove: MaxM cascade (State→Town→ZIP→Street→Number) from `property.form.js` — no DB tables backing it; confirmed not in original JEA 4.0.4; `get_areas()` and `get_towns()` removed from `FeaturesController`
- Fix: Google Maps API URL — `&amp;` → `&` in PHP URL strings and `&loading=async` appended in `GeolocalizationField.php`, `searchmap.php`, `default_googlemap.php`

---

## [1.0.15] – 2026-06-24

- Fix: `ThumbnailController::create()` returned 500 — `$this->getInput()` removed from J6 `BaseController`; replaced with `$this->input` across 4 controller files (10 call sites); `echo $output` after `readfile()` removed to stop JPEG corruption

---

## [1.0.14] – 2026-06-24

- Fix: `com_rca_jea` sub-extension ZIP was not rebuilt when 1.0.13 was packaged; component shipped at 1.0.12 with broken asset URIs; sub-ZIP rebuilt from updated 1.0.13 source and repackaged as 1.0.14

---

## [1.0.13] – 2026-06-24

- Fix: All `com_rca_jea` assets (CSS + JS) never loaded — incorrect URI paths in `joomla.asset.json` included redundant `css/`/`js/` subdirectory prefixes; Joomla WAM path resolution doubled those segments, producing paths that do not exist on disk; removed all redundant prefixes; leaflet assets corrected to `media/` absolute-path format

---

## [1.0.12] – 2026-06-24

- Fix: Gallery buttons still dead after 1.0.11 — `"dependencies": []` (explicit empty array) in `joomla.asset.json` for `com_rca_jea.gallery` caused Joomla's WebAssetManager to silently suppress the script tag; no Joomla core extension uses `"dependencies": []` — the correct convention for a standalone script with no dependencies is to omit the key entirely; removed the key

## [1.0.11] – 2026-06-24

- Fix: Gallery delete / move-up / move-down buttons still dead after 1.0.10 — `gallery.js` was never loading; `useScript('com_rca_jea.gallery')` was called inside `gallery.php` via `Factory::getApplication()->getDocument()->getWebAssetManager()`, which registers against a different document instance than the one the admin template renders; moved the `useScript` call to `edit.php` where it uses the correct `$this->document->getWebAssetManager()` path; removed the unreliable call from the layout file
- Fix: JavaScript syntax error in `property.form.js` — variable names `RCA JEA_BASE`, `RCA JEA_AJAX_BASE`, `RCA JEA_MULTI_UNIT_TYPE_IDS` contained spaces (invalid JS identifiers), causing `ReferenceError` in strict mode on load; renamed to `RCA_JEA_BASE`, `RCA_JEA_AJAX_BASE`, `RCA_JEA_MULTI_UNIT_TYPE_IDS` throughout

## [1.0.10] – 2026-06-24

- Fix: Gallery delete / move-up / move-down buttons dead after upload — `gallery.js` event delegation locates the parent `<li>` via `closest('li.gallery-item')` but `gallery.php` rendered each item as `<li class="item-{k}">` without the `gallery-item` class; delete silently exited early, sort buttons threw a TypeError; added `gallery-item` class alongside the existing `item-{k}` class

## [1.0.9] – 2026-06-24

- Fix: "Class 'HTMLHelper' not found" 500 error after saving a property with an image — `admin/layouts/rca_jea/fields/gallery.php` called `HTMLHelper::image()` on three lines but had no `use Joomla\CMS\HTML\HTMLHelper` import; the bug was silent before 1.0.8 because the gallery `foreach` loop only executes when images exist in the database, and images could not be saved until the 1.0.8 upload fix

## [1.0.8] – 2026-06-24

- Fix: PNG (and all image) uploads not saving to disk or database — `Input\Files::get()` decodes `newimages[]` array-named inputs into a numerically-indexed array; `processImages()` was checking `isset($rawUploaded['name'])` at the top level (which fails for this format) and silently skipping the entire upload block; replaced with direct `UploadHelper` construction from each decoded file entry
- Fix: Amenities cleared on image-save — `Table::store()` invokes `check()`, which sets `amenities = ''` whenever the value is a JSON string (not an array); replaced `$table->store()` in `processImages()` with a direct single-column `UPDATE` on `#__rca_jea_properties.images`, which writes only the images column and leaves amenities untouched

## [1.0.7] – skipped

## [1.0.6] – 2026-06-24

- Fix: "Call to a member function get() on null" on property detail page — `plg_rca_jea_social` provider.php called `PluginHelper::getPlugin('rca_jea', 'social')` but the plugin is registered under group `system`; the lookup returned null, leaving `CMSPlugin::$params` uninitialized; changed to `PluginHelper::getPlugin('system', 'social')` so params are correctly loaded from `#__extensions`
- Cleanup: Removed 1.0.5 diagnostic `try/catch` wrapper from `Property/HtmlView::display()`

## [1.0.5] – 2026-06-24

- Debug: Added try/catch(\Throwable) diagnostic wrapper in `Property/HtmlView::display()` to capture full stack trace for "Call to a member function get() on null" error; wrapper logs to PHP error log and re-throws so Joomla error handling is unaffected

## [1.0.4] – 2026-06-24

- Fix: "HTMLHelper utility not found" 500 error on property detail page — `Property/HtmlView` was missing `HTMLHelper::register()` calls for `utility.formatPrice`, `utility.formatSurface`, and `amenities.bindList`; these were only registered in the list view and are required whenever the detail view is loaded directly

## [1.0.3] – 2026-06-24

- Fix: TypeError in `getFeatureValue()` — changed signature from `int $featureId` to `int|string $featureId`; `default_remind.php` has `strict_types=1` and passes state values as strings; the method body already casts `(int) $featureId` internally so the type hint was the only obstacle

## [1.0.2] – 2026-06-24

- Fix: TypeError on property search — `list.ordering` and `list.direction` state values null-coalesced before passing to `buildSortLink()` in `Properties/HtmlView::prepareSortLinks()`; PHP 8 rejects null for non-nullable string typed parameters

## [1.0.1] – 2026-06-24

- Fix: Fatal error "Call to undefined method HtmlView::getApplication()" on property search — replaced `$this->getApplication()` with `Factory::getApplication()` in 4 site view files (Properties/HtmlView, Properties/FeedView, Form/HtmlView, Property/HtmlView); `getApplication()` does not exist on Joomla AbstractView/HtmlView

## [1.0.0] – 2026-06-24

- First public production release of RCA JEstate Atlas
- Fork of Joomla Estate Agency (JEA) 4.0.4 (last released April 2023); does not share the JEA name
- Full Joomla 6 migration complete; J4/J5/J6 compatible
- USA localization: states, sq ft, USD, US number formatting
- Fix: Router::build() and Router::parse() parameter type hints removed for PHP 8 LSP compliance with RouterInterface
- Fix: Joomla Updater end-to-end verified (client declaration, download gate, assembly ZIP rebuild)
- All sub-extensions reset to 1.0.0: com_rca_jea, mod_rca_jea_emphasis, mod_rca_jea_search, mod_rca_jea_slider, plg_finder_rca_jea, plg_rca_jea_geolocalize, plg_rca_jea_social, plg_system_rca_jea

## [6.0.20] – 2026-06-24

- Fix: Joomla Updater now correctly detects package updates — added `<client>site</client>` to update feed (default client_id was 1/Administrator; package is client_id 0/Site; mismatch caused extension_id=0 in #__updates)
- Fix: Rebuilt all 7 module/plugin assembly ZIPs from scratch — prior zip -r update approach left stale manifests in archives; sub-extensions now correctly ship at 4.1.3/2.0.3/3.0.3 with no individual updateservers
- Sub-extensions: com_rca_jea 6.0.20 (version aligned with package)

## [6.0.19] – 2026-06-24

- Fix: Added COM_RCA_JEA_DESCRIPTION language string to en-GB and fr-FR sys.ini — resolves raw key tooltip on RCA JEstate Atlas component in Extensions > Manage
- Sub-extensions: com_rca_jea 6.0.17

## [6.0.18] – 2026-06-24

- Fix: Removed individual <updateservers> from all 8 sub-extension manifests — updates now route exclusively through the package feed (pkg_rca_jea_basic.xml). Eliminates "Could not open update site" warnings in Joomla Updater.
- Sub-extensions: com_rca_jea 6.0.16, mod_rca_jea_emphasis 2.0.3, mod_rca_jea_search 4.1.3, mod_rca_jea_slider 4.1.3, plg_finder_rca_jea 3.0.3, plg_rca_jea_geolocalize 4.1.3, plg_rca_jea_social 4.1.3, plg_system_rca_jea 4.1.3

## [6.0.17] – 2026-06-24

- Fix: PropertyModel::processImages() no longer throws when saving with no uploaded images
- Fix: Gateways nav layout null guard — no error when filter.type is not set
- Fix: About page toolbar title updated to RCA JEstate Atlas
- Fix: Admin menu "Areas" label renamed to "Neighborhoods"
- Fix: Google Maps API key "More info" link URL fixed (en-GB + fr-FR)
- Fix: NEWS.txt updated with full release history 6.0.3–6.0.17
- Sub-extensions: com_rca_jea 6.0.15

## [6.0.16] – 2026-06-24

- Fix: FeatureController::getModel() now forces ignore_request=false. FormController::getModel() defaults to ['ignore_request'=>true], which sets __state_set=true in BaseModel::__construct() and skips populateState(). FeatureModel always needs populateState() to run to resolve feature.table from the request. Without it, getTable() received empty feature.table → 'Incorrect table name' MySQL error 1103 on Cancel.
- Fix: FeatureController::getRedirectToListAppend() added to propagate &feature= back to featurelist on Cancel/save redirect.
- Sub-extensions: com_rca_jea 6.0.14

## [6.0.15] – 2026-06-24

- Fix: com_rca_jea.xml submenu links — changed `subtype=` (plural) to `feature=` (singular) for all 7 featurelist entries. Root cause of `Form::loadForm could not load file` on all feature New/Edit forms and `feature.table` not set on all featurelist pages. `FeaturelistModel` and `FeatureModel` both read `feature=` param; manifested as empty feature state → invalid SQL → false items → null form file → exception.
- Sub-extensions: com_rca_jea 6.0.13

## [6.0.14] – 2026-06-24

- Fix: root cause of persistent "404 Component not found" on all form operations — all 13 controllers (admin + site) now declare `protected $option = 'com_rca_jea'`. `ComponentHelper::getComponentName()` extracts `Jea` from namespace `RCA\Component\Jea` and returns `com_jea`; the explicit property declaration bypasses this fallback.
- Fix: remove debug logging from admin/src/View/Property/HtmlView.php
- Sub-extensions: com_rca_jea 6.0.12

## [6.0.13] – 2026-06-24

- Debug: add runtime log capture in Property/HtmlView::display() to identify persistent 404 root cause
- Sub-extensions: com_rca_jea 6.0.11

## [6.0.12] – 2026-06-24

- Fix: admin/views/property/tmpl/edit.php — removed invalid $wa->useScript('bootstrap.framework') (not a registered Joomla 6 WAM asset; throws RuntimeException → 404)
- Sub-extensions: com_rca_jea 6.0.10

## [6.0.11] – 2026-06-24

- Fix: Form XML files migrated from J3 admin/models/forms/ to J6 standard admin/forms/ path
- Fix: com_rca_jea.xml manifest — replaced <folder>models</folder> with <folder>forms</folder>
- Fix: 5 PHP files — updated hardcoded models/forms path references to forms/
  (FeaturesController, FeaturelistModel, FeatureModel, FeaturesModel, site/FormModel)
- Sub-extensions: com_rca_jea 6.0.9

## [6.0.10] – 2026-06-24

- Fix: View/Property/HtmlView.php — canDo property type corrected from \stdClass to Registry (JeaHelper::getActions() returns Registry since 6.0.9)
- Sub-extensions: com_rca_jea 6.0.8

## [6.0.9] – 2026-06-24

- Fix: JeaHelper::getActions() — replaced custom stdClass builder with ContentHelper::getActions() returning Registry (J5/J6: §8e)
- Fix: All 7 admin view files — canDo->core_* underscore access replaced with canDo->get('core.*') Registry pattern
- Sub-extensions: com_rca_jea 6.0.7

## [6.0.8] – 2026-06-24

- Fix: all 10 view HtmlView.php files — state property type corrected from \stdClass to Joomla\CMS\MVC\Model\State (J5/J6: State extends Registry, not stdClass)
- Sub-extensions: com_rca_jea 6.0.6

## [6.0.7] – 2026-06-24

- Fix: created RcaJeaComponent (admin/src/Extension/) extending MVCComponent + RouterServiceInterface/RouterServiceTrait
- Fix: provider.php updated to use RcaJeaComponent — resolves setRouterFactory() undefined method error
- Sub-extensions: com_rca_jea 6.0.5

## [6.0.6] – 2026-06-24

- Fix: services/provider.php — corrected use statements to Joomla\CMS\Extension\Service\Provider\{MVCFactory,ComponentDispatcherFactory,RouterFactory}
- Fix: removed invalid second argument from RouterFactory constructor call
- Sub-extensions: com_rca_jea 6.0.4

## [6.0.5] – 2026-06-24

- Fix: replaced stale com_rca_jea.zip (LegacyComponent/flat-MVC) with PSR-4 MVCComponent build
- Fix: removed formbehavior.chosen calls (invalid in J6) from properties and featurelist templates
- Fix: HTMLHelper::_('bootstrap.tooltip') — added .hasTooltip selector per J6 standard
- Fix: removed nonexistent tables/ folder from com_rca_jea.xml manifest
- Sub-extensions: com_rca_jea 6.0.3

## [6.0.4] – 2026-06-23

- Removed all MaxM proprietary code and business logic; restored original JEA business logic
- Full J6 compliance pass: @jcmswatch stubs added for all J7-at-risk patterns
- Sub-extensions: com_rca_jea 6.0.2, mod_rca_jea_emphasis 2.0.2, mod_rca_jea_search 4.1.2, mod_rca_jea_slider 4.1.2, plg_finder_rca_jea 3.0.2, plg_rca_jea_geolocalize 4.1.2, plg_rca_jea_social 4.1.2, plg_system_rca_jea 4.1.2

## [6.0.3] – 2026-06-22

- Phase G MaxM strip continuation: mod_rca_jea_slider, mod_rca_jea_emphasis MaxM code removed
- Bootstrap modal jQuery API replaced with native BS5 + vanilla JS fetch

## [6.0.2] – 2026-06-21

- Initial J6 migration: flat MVC → PSR-4 MVCComponent structure
- All J3/J4 legacy patterns replaced with J6 APIs

## [6.0.1] – 2026-04-28

- Author block corrected; getDbo() → getDatabase(); declare(strict_types=1) added

## [6.0.0] – 2026-04-19

- USA standards refactor (state/neighborhood/sq.ft./USD); Joomla 5/6 compatibility pass
