Changelog v4.1

4.1.6

Released: 13 October 2026
  • Change Performance: remove the top-level-category self-join from all listing queries. The join could not use an index and materialised the whole result set before LIMIT; tlcat_id/tlcat_name are now resolved in PHP instead. Measured 7x faster on a 15k-category directory. Note: listings with tied sort values may reorder once at a pagination boundary - tie order was never guaranteed by SQL.
  • Change Performance: SEF URL routing no longer scans a whole table on every page load. Matching slugs with `BINARY alias = ?` defeated the alias index (8,442 rows examined to return 1); the alias columns now use a byte-exact collation and #__mt_links.alias gains an index. Category slug lookup 7.54ms -> 0.20ms, listing 9.28ms -> 0.17ms. Slug matching stays case- and accent-sensitive as before.
  • Change Performance: category pathways, names and aliases are now served from one per-request map instead of a query each, and ancestors resolved by walking cat_parent instead of an unindexable lft/rgt scan. A category page dropped from 509 queries to 132, search from 1442 to 183, listing details to 158. Note: skipped above 50,000 categories.
  • Change Performance: the category access check no longer rebuilds the config object, which reloaded the whole #__mt_config table, for every category. A search across a branch of 1,000 categories issued roughly 3,000 queries for the check alone.
  • Change Convert all Mosets Tree tables from MyISAM to InnoDB, on new installs and via upgrade. Fixes site-wide stalls where a hit-counter write takes a whole-table lock and blocks every reader behind it ("Waiting for table level lock"), exhausting connections and returning HTTP 500. Note: InnoDB fulltext has no 50% rule and a 3-character minimum token, so common words and 3-letter words are now searchable. Renumbering custom fields, categories and listing images now retries when InnoDB reports a deadlock, so saving at the same time as another admin no longer fails with "Deadlock found when trying to get lock".
  • Addition Add indexes for filters that had none: #__mt_favourites(user_id), #__mt_reviews(user_id), #__mt_log(rev_id), #__mt_fields_map(cat_id) and #__mt_cl(cat_id, main, link_id).
  • Removed Remove the never-queried FULLTEXT index on #__mt_links(link_name, link_desc) and the redundant #__mt_images(ordering) index.
  • Bug Fix Use UPDATE LOW_PRIORITY for hit and visit counters, so a counter write no longer blocks readers on sites remaining on MyISAM.
  • Bug Fix Guard the Visit counter (task=visit) with the same hit_lag cookie window as the listing hit counter; crawlers were inflating visit counts on every request.
  • Bug Fix Always render rel="nofollow" on Visit-redirect links, in both the ahrefvisit plugin and the Website core field, so crawlers no longer follow the redirect and fire the visit counter.
  • Bug Fix Fix back-end Edit Listing rendering the wrong fields when the main category is changed. The AJAX rebuild ran as the site session rather than the administrator, so the WYSIWYG editor fell back to the global default (leaving a dead Description box, losing its content on editors such as JCE) and fields restricted by Edit Access Level were dropped.
  • Bug Fix Fix listings export dropping every listing created on the "To" date itself; the date-range filter treated the end date as midnight instead of the end of the day, so splitting an export into two ranges silently lost the boundary day's listings.
  • Bug Fix Fix listings import failing with a database error ("Field 'alias' doesn't have a default value") when "Update Existing Listings" is enabled and the CSV contains listings that do not exist yet; new rows now get a generated alias.
  • Bug Fix Fix the import creating a duplicate "Cat Name" custom field on every run when the CSV contains the exported cat_name column.
  • Bug Fix Fix the exported CSV containing the cat_id column twice when breadcrumbs are enabled and Category ID is selected.
  • Change Report the real cause when an import upload fails - file larger than the server's upload limit, partial upload or other server-side errors - instead of "No file was uploaded." for everything.
  • Addition Add Alias to the exportable listing columns so exported listings keep their SEF URLs on import.
  • Bug Fix Fix a failed field reload on category change failing silently; fields are now restored to their original positions and an error shown, with a specific message for an expired session.
  • Bug Fix Fix rebuilt field captions pointing at a non-existent element, so clicking a caption no longer focused its field.
  • Bug Fix Fix a PHP deprecation notice from a custom field with no default value, which broke the field-list JSON on sites displaying errors.
  • Bug Fix Fix short open tags in mod_mt_smart_filter (empty Itemid, causing 403 Forbidden on filtered results) and the admin category editor's "Remove Map" link.
  • Bug Fix Fix stripped listall search filter in pagination.
  • Bug Fix Fix secondary-category ("Also appear in these categories") rows multiplying on every back-end save - a whitespace mismatch between the form and the save path re-inserted every existing assignment as new, inflating category counts to match. Saving a listing now removes any duplicate rows it finds, the import de-duplicates and trims the cat_id column, and a new unique index on #__mt_cl (with a one-time clean-up on upgrade) prevents duplicates for good. Run a Full Recount after upgrading if your category counts were inflated.
  • Bug Fix Fix "Rebuild Thumbnails" and "Import Images" failing with "redirected you too many times" on larger sites. Each batch ended in a server-side redirect to the next one, so the whole run counted as a single redirect chain and the browser stopped it at 20 hops, roughly 1,000 images; the tools now move between batches from the browser and show their progress as they go.
  • Addition Add a Search Operator option to Select Multiple fields, matching the option Checkbox with Image and Tags already have: Match All (AND, the existing behaviour, still the default) or Match Any (OR). Attribute-style fields (a hotel with parking and wifi) keep working as before; mutually-exclusive fields (Gender, Hair Colour) can now be switched to OR so selecting more than one value returns results instead of nothing.
  • Bug Fix Fix Select Multiple, Checkbox with Image and Tags (checkbox search mode) matching a selected value against any other value that contains it as a substring, eg. searching "Male" also returned listings whose field was set to "Female" only. Matching is now anchored to the pipe-delimited value boundaries, so only a whole selected value can match.
  • Bug Fix Fix the Joomla Updater offering the wrong branch of Mosets Tree after a Joomla major upgrade. The update site URL carries the Joomla version it was built for, and it was only ever written when the Access Key was verified on My Subscription, so upgrading Joomla left it asking for the previous Joomla version's releases and no update was ever offered. Mosets Tree now detects the change and repoints the update channel on its own.
  • Change My Subscription now says when the details shown are a saved copy from an earlier check. The expiry date is only refreshed when the Access Key is verified, so a renewal could leave the page reporting an expired subscription indefinitely.
  • Change RSS feeds are now cached in the "com_mtree_rss" Joomla cache group instead of as loose .xml files written straight into /cache, so Joomla expires them on its own and Clear Cache can flush them; sites previously accumulated one permanent file per listing, category and user, which large directories hit as a file-count problem with their host, and the obsolete files are deleted on upgrade.
  • Removed Remove the it-IT language file, which held Spanish text rather than Italian, so an Italian site now falls back to English until a real Italian translation is available.
  • Bug Fix Fix the Spanish translation calling every listing a "cupón" (coupon). The file we shipped came from a coupon directory, so a Spanish site read "Todos los cupónes" where it should read "Todos los listados"; 400 occurrences across the site, admin and sys language files are now corrected to listado/listados, matching the wording the newer keys already used.

4.1.5

Released: 24 July 2026
  • Bug Fix Fix fatal error 'Class "Filename" not found' when saving a listing with an image upload on the front end (regression in 4.1.4).
  • Bug Fix Fix two latent fatal errors: search-by with an invalid custom field id, and the bundled Savant2 form helper plugins (form, input, checkbox, etc.) on PHP 8.

4.1.4

Released: 7 July 2026
  • Bug Fix Security: hardening across file/attachment handling, admin AJAX auth and CSRF, access control, and output encoding - lock down the spiderurl/checksubscription AJAX actions, guest attachment access, category submission, and reflected/stored XSS in admin search, tag cloud, and category modules.
  • Addition Add per-field "Match all words in any order" search option (off by default): when enabled on a text field, multi-word advanced search terms match listings containing all of the words in any order instead of as one exact phrase; double-quoted "phrases" still match exactly. Shown in the field editor only for free-text field types
  • Bug Fix Fix Grid Gallery lightbox looping back to the first image after the 5th when a listing has 6 or more images (Summary and Details views); all images are now rendered as popup anchors while the grid still shows the 5-tile preview with the "+N" overlay, so the lightbox steps through the full set
  • Removed Remove the unused Link Checker feature entirely.

4.1.3

Released: 20 May 2026
  • Addition New field type: Date Period - searchable field for storing a period between two dates (eg. 1939-09-01 to 1945-05-09); end date is optional for ongoing periods, search uses "active during" overlap matching
  • Addition Unified geocoder: Photon (photon.komoot.io) is now the default with Google Maps Geocoder retained as a configurable option via new 'geocoder' config; adds Photon autocomplete dropdown with keyboard navigation (ArrowUp/ArrowDown/Enter/Escape) and 'geocoder_countrycode' config to restrict results by ISO 3166-1 alpha-2 country code(s) (Photon supports multiple comma-separated codes, Google Maps uses the first). Map config reorganised to separate Geocoder section (Geocoder, Country Code) from Google Maps section (API Key, Map Types, Default Type, Styled Map), and all hardcoded google.maps.Geocoder calls replaced with the MT.Geocoder abstraction across frontend, admin, templates, and modules
  • Addition Add 'noimage_thb' config (Image group) to override the no-image thumbnail with a custom path or URL; also auto-detects per-template noimage_thb.png at /components/com_mtree/templates/{template}/noimage_thb.png or /images/noimage_thb.png so custom templates can ship their own placeholder without code changes
  • Addition Add 'keep_filter_open_when_filtered' option in template config.php (listings_view) to control whether the filter dropdown is expanded by default when listings are filtered
  • Bug Fix Fix radius search: distance not shown in listing summary when listing has no populated address fields (banyan styles 1-9, boldfire style 1), and SQL error "Unknown column 'distance' in 'order clause'" when advanced search uses sort=distance without an active radius search
  • Bug Fix Fix core fields (Address, City, State, Country, Postcode, etc.) missing from listing summaries when stray cfvalues rows exist for some listings but not others
  • Bug Fix Fix malformed closing tag in category field type HTML output
  • Bug Fix Fix COM_MTREE language strings not loaded in mt modules when displayed on non-Mosets Tree pages
  • Change a11y: change listing summary heading from h3 to h2 in all bundled templates (banyan, boldfire, drift, sienna, slate, zenith) to fix WCAG 2.1 heading order; custom CSS targeting .mt-ls-header h3 will need updating

4.1.2

Released: 30 April 2026
  • Addition New module: mod_mt_location_search
  • Addition New field type: Heading - displays section headings to organize custom fields in Add Listing form, Listing Details and search forms
  • Bug Fix Fix grid gallery lightbox navigating all images on page instead of per listing
  • Bug Fix Fix trigger_modified_listing config to support core field IDs (Name, Description, etc)

4.1.1

Released: 8 March 2026
  • Addition Add Facebook App ID configuration for Facebook Like button.
  • Note Default gallery in summary view set to classic slider
  • Bug Fix Preserve CodeMirror, TinyMCE or any WYSIWYG editor's content on category change
  • Bug Fix Refactor Feedcreator
  • Removed Remove unused FancyBox library and assets
  • Bug Fix Replace Video.js 3.2.0 with native video player
  • Bug Fix Replace MediaElement.js 2.19.0 with native audio
  • Bug Fix Enable seeking in audio/video players
  • Note Replace FlexSlider with Swiper for image galleries
  • Bug Fix Constrain cluster map within container bounds
  • Note Updated markerclusterer.js library to new API version
  • Note multipledates: replace jQuery datepick with Flatpickr
  • Bug Fix Use frontend URL for file attachment downloads in admin
  • Addition feat(a11y): improve WCAG 2.2 accessibility across Mosets Tree

4.1.0

Released: 7 November 2025
  • Addition Add grid-style gallery layout option for listing images with adaptive layouts based on photo count.
  • Bug Fix Fix bug with CSV Export where secondary categories are not being exported.
  • Addition Add a new option to download CSV file from Export.
  • Addition Add a new option to export categories.
  • Addition Search & Advanced Search: Fix bug where listings are shown when searching by category that the user is not authorized to view.
  • Addition New feature to import JSON and ZIP files from the Mosets Tree's export feature.
  • Addition New tool to view all categories breadcrumbs and surface existing Diagnosis tool.
  • Bug Fix Fix bug with Edit Listing dropdown menu when Font Awesome or Bootstrap is not available.
  • Note cat_created column's default value is now set to CURRENT_TIMESTAMP.
  • Addition Import tool now supports updating existing listings.
  • Addition Now store guest email when reports are made.
  • Note Now use Font Awesome 6 Free.