CHANGELOG — pkg_rca_masonrywall (RCA Masonry Wall)
Current retail release:1.2.25 (2026-10-31) — install/upgrade only via pkg_rca_masonrywall_1.2.25.zip (pro feed pkg_rca_masonrywall).
loadPrimaryArticleInCategory() on that parent always returned the same first article in the tree (demo: J2C Direct Download docs), so every card pointed at one URL. The category line now uses each card’s doc category (label + link id). MasonrywallLibContentRoute::routeCategoryLine() routes the context article when its category matches the linked id or sits under it in the content tree; otherwise it uses the primary published article in that category only, then a dedicated category menu / core category route.routeCategoryLine() so nested doc categories under Documents resolve per card, not via the parent bucket.view=category menus. Category lines moved to routeCategoryLine() (article menu-first, same family as title/read-more).pkg_rca_masonrywall_1.2.24.zip./component/content/category/ when the hub page Itemid was active. Shared resolver MasonrywallLibContentRoute added: menu lookup by query view/id (including layout=blog menus), article routes aligned with Joomla 6 core patterns.pkg_rca_masonrywall_1.2.23.zip.#hex, rgb(), and var(--rca-*) via the existing csscolor admin field. Frontend CSS overrides legacy detail box tint rules when set.pkg_rca_masonrywall_1.2.22.zip.pkg_rca_masonrywall_1.2.21.zip.getContent requests did not load com_rca_masonrywall site language, so cards after the first batch showed raw keys (COM_RCA_MASONRYWALL_READ_MORE, COM_RCA_MASONRYWALL_IN_CATEGORIES). Site view loads the language file at the start of masonry rendering.pkg_rca_masonrywall_1.2.20.zip.catslug routing that pinned the hub page Itemid (e.g. on documentation pages). Resolves each article’s dedicated menu item when present, then Joomla 6 core article route with language.pkg_rca_masonrywall_1.2.19.zip.$layout for both the layout key and the readGroup() array, so appendGroupRules() received an array instead of a string (fatal on Columns/Vertical when any layout override such as line height was set).pkg_rca_masonrywall_1.2.18.zip.pkg_rca_masonrywall_1.2.17.zip.rca_masonrywall.css / template inheritance.admin/language/en-GB/com_rca_masonrywall.ini used a # comment containing parentheses on the typography block. PHP parse_ini_file() treats that as a syntax error, so Joomla loaded zero strings and the backend showed raw COM_RCA_MASONRYWALL_* keys. Comment corrected to ; form without parentheses.pkg_rca_masonrywall/zips/ per manifest <files folder="zips">. A bad 1.2.16 build put children at the assembly root and bundled stale ZIPs, so Joomla could not find zips/com_rca_masonrywall_1.2.16.zip (Install path does not exist). Rebuilt with build/assemble_child_zips.sh (flat child ZIP layout) and a clean package archive.pkg_rca_masonrywall_1.2.16.zip.resolveContentImageUrl() strips #joomlaImage:// fragments and remaps missing /images/rca/rca-{folder}/ to /images/rca/{folder}/ when the file exists (Joomla articles + crop pipeline).arrangeIfReady() prevents Cannot read properties of undefined (reading 'arrange') on resize when Isotope is not ready.pkg_rca_masonrywall_1.2.15.zip.98o): First item of each new row was positioned under the previous row’s last column (left: 975px etc.) because Isotope used packery (shortest-column). Columns grid now always uses fitRows so each row starts at left: 0 and tiles flow left-to-right. Layout mode control hidden for columns grid (not applicable).pkg_rca_masonrywall_1.2.14.zip.textColorValue(): Argument #1 ($color) must be of type string, null given — loadResponsiveMasonry() now sets $db_color_src via widgetColorParam() (was undefined in that method). Color helpers accept null and coerce to inherit.csscolor: Color swatch moved to the left of the text input (after the field label), matching the original color-field layout.pkg_rca_masonrywall_1.2.13.zip.Class "MasonrywallLibResponsive" not found — responsive.php class renamed from legacy MinitekWallLibResponsive to match JLoader prefix and MasonryModel.csscolor field: Correct utilities.php path on save; removed HTML5 pattern so empty values validate.inherit so cells use active template/CMS text and background. No forced hex defaults on read when param is empty. New widgets default empty on bg/text color fields (existing saved colors unchanged).pkg_rca_masonrywall_1.2.12.zip.#hex and var(--rca-*) tokens (new csscolor form field). Generated CSS uses backgroundColorValue() / textColorValue() so theme variables work on detail boxes, hover overlays, and responsive breakpoints — not only hex via hex2RGB().pkg_rca_masonrywall_1.2.11.zip.Mwall is not defined — WAM now loads rca_masonrywall.js / rca_masonrywall.css (renamed from legacy Minitek filenames on disk). Widget init inline script is registered via WAM with a dependency on the main script so load order is correct.minitek from shipped asset filenames; admin bundle is admin-rca_masonrywall.* with asset name com_rca_masonrywall.admin.pkg_rca_masonrywall_1.2.10.zip.#__rca_masonrywall_widgets_source when the widget has a source_id (removed brittle source_type gate that skipped writes). getItem() always hydrates stored source_params and normalizes legacy source_typejoomla → content. Save merges posted jform[source_params] with validated data and existing DB values so category IDs are not wiped when showon-disabled fields are omitted from POST. Defaults joomla_mode to ja for the content source. Raw POST is read via input->post (not filtered get()).pkg_rca_masonrywall_1.2.9.zip.WidgetModel merges posted jform[source_params] with validated data so fancy-select category IDs are not dropped. Content source form uses Joomla 6 filter="intarray" on category/tag multi-selects; IDs normalized on load/save.pkg_rca_masonrywall are 1.2.8. Install/upgrade only via pkg_rca_masonrywall_1.2.8.zip — not individual child packages.array_key_exists(): Argument #2 ($array) must be of type array, null given when validated form data omits source_params. Posted jform[source_params] is merged on save; widgets_source insert vs update uses row existence instead of stale id in $data.rca-wall / rca-wall-pro). Canonical URLs centralized in MasonrywallHelper.ItemModel::getItem() no longer passes NULL images / urls into Registry::loadString() (J6 type error on add form).use Joomla\CMS\String\PunycodeHelper for external URL fields (was unqualified class on save).Registry::loadString() for masonry_params / source_params when DB values or rows are missing.CMSObjectget()/set() on stdClass from getItem() — GridModel, Grid/HtmlView, ItemModel, Item/HtmlView (same class of bug as widget 1.2.1).$item->source_id instead of $item->get('source_id') in WidgetModel::getItem().GroupTable / WidgetTable duplicate-name check uses new static($this->getDatabase()) instead of Table::getInstance() (removed J7).TagTable + Factory::getDbo() instead of legacy TagsTable factory.Factory::getDBO() → Factory::getDbo() across component PHP.JLoader::register / registerPrefix for MasonrywallLibUtilities and site libraries/ (Minitek-era); migrate to PSR-4 in a later pass.Categories::getInstance() in content source helper (deprecated; still works J6).RcaMasonrywallContentSource and legacy site library classes unchanged.plg_content_rca_masonrywall* administrator language files so Data source and Layout labels render (not raw PLG_* / COM_* keys).admin-minitekwall (files on disk); fixes missing tile grid CSS/JS.localVersion() uses the highest version from component manifest and #__extensions (component + package).forms/{source}.xml from the active plugin in WidgetModel::preprocessForm() (not only onContentPrepareForm); bind wizard source_id in loadFormData(); template fallback via getGroup('source_params').WidgetModel::loadFormData() when binding wizard widget_type (1.2.0 regression).id="adminForm" so Joomla.submitbutton() no longer throws Cannot read properties of null (reading 'task').widget_type; DB column added on upgrade).WidgetModel::preprocessForm() so source plugin XML (e.g. Joomla Articles / Categories) merges into the widget form.name) and Status like Minitek (was description-only with broken title layout).{source_id}_source fieldset even when the event list is empty.in_array() on null ignoreFieldsets (ensure source[key] and ignore arrays are always defined).onWidgetPrepareSource so enabled source plugins show green Select (they were treated as inactive in admin). Source form POST includes view=widget. Enable plugin links open the plugin list filtered by element (avoids Joomla “not permitted to use that link (#…)” on direct plugin edit URLs).script.php postflight that called InstallModel::install() without a local package path (could surface Install path does not exist during package updates). Child extensions are only installed via pkg_rca_masonrywall child ZIPs.assemble_child_zips.sh verifies every child ZIP listed in the package manifest exists before release.RCA Source - {type} plugin searches; Enable plugin opens the correct com_plugins edit screen for rca_masonrywallcontent, rca_masonrywallfolder, etc. (same tab). Green Select appears once the plugin is enabled.protected $option = 'com_rca_masonrywall' (and FormController view_item/view_list) so New Widget / New Custom Grid no longer redirect to non-existent com_masonrywall (404 Component not found).com_rca_masonrywall.xml (not legacy rca_masonrywall.xml); version check uses RCA pkg_rca_masonrywall feed; remove Minitek installer auth prompts.PLG_CONTENT_RCA_MASONRYWALL* language keys (fork typo MASONRYWALLE*); manifest <name> uses language constants for Extension Manager labels.services/provider.php uses Joomla\CMS\HTML\Registry for setRegistry() (fixes “Resource Joomla\\Registry\\Registry has not been registered with the container” on J6).mod_rca_masonrywall.xml language paths now use folder="language" and en-GB/mod_rca_masonrywall.ini (fixes JInstaller missing INI at package extract root).com_rca_masonrywall, mod_rca_masonrywall, plg_content_rca_masonrywall*), namespace RCA\Component\Masonrywall, tables #__rca_masonrywall_*.rca_masonrywallcontent, rca_masonrywallcustom, etc.; loader and helper wiring updated.THIRD_PARTY_NOTICES.txt for upstream attribution.