{"id":1259,"date":"2026-08-18T22:00:00","date_gmt":"2026-08-18T15:00:00","guid":{"rendered":"http:\/\/www.solidres.com\/blog\/?p=1259"},"modified":"2026-08-18T22:55:41","modified_gmt":"2026-08-18T15:55:41","slug":"solidres-4-2-0-is-out","status":"publish","type":"post","link":"https:\/\/www.solidres.com\/blog\/2026\/08\/18\/solidres-4-2-0-is-out\/","title":{"rendered":"Solidres 4.2.0 is here \u2014 25 languages, dark mode, and our own Channel Manager"},"content":{"rendered":"\n<p><strong>Solidres 4.2.0<\/strong> is out. It is a big one \u2014 not because of a single headline feature, but because it is the release where several things we have been building in the open all summer finally land in the stable channel at the same time: 25 languages, the new date picker, dark mode across the board, a spreadsheet-style Inventory grid \u2014 and the foundation the brand-new <a href=\"https:\/\/www.solidres.com\/blog\/introducing-the-solidres-channel-manager\">Solidres Channel Manager<\/a> runs on.<\/p>\n\n<h4>The headline: your own channel manager, inside Joomla<\/h4>\n\n<p>4.2.0 is the minimum version for the <strong>Solidres Channel Manager<\/strong>, our own channel connection service: your property, room types and rate plans are created on the channel side for you, availability and rates sync both ways automatically, and channel bookings land in Solidres within seconds \u2014 all from your Joomla administrator, with no second dashboard and no second vendor. It launches today alongside this release.<\/p>\n\n<p>We have written it up properly in its own post: <a href=\"https:\/\/www.solidres.com\/blog\/introducing-the-solidres-channel-manager\">Introducing the Solidres Channel Manager \u2192<\/a><\/p>\n\n<p>Two things in 4.2.0 exist because of it and are worth calling out here:<\/p>\n\n<ul>\n\t<li><strong>Channel restrictions<\/strong> \u2014 stop-sell, closed-to-arrival and closed-to-departure, per rate plan and per date, pushed to your channels like any other update. Close your channels on the dates you would fill anyway, and keep taking commission-free bookings on your own site.<\/li>\n\t<li><strong>The Inventory grid<\/strong> (new <em>plg_solidres_inventory<\/em> plugin) \u2014 availability, nightly rates, minimum and maximum stay and restriction flags for every room type and rate plan, laid out day by day in one screen. Edit cells inline, or bulk-update several date ranges across several room types and rate plans in a single pass, and everything saves through the normal Solidres pipelines. It is genuinely the fastest way to prepare a season, and it shows you exactly the numbers your channels see.<\/li>\n<\/ul>\n\n<h4>What you previewed with us, now shipping<\/h4>\n\n<p><strong>Solidres speaks 25 languages.<\/strong> The translation effort we <a href=\"https:\/\/www.solidres.com\/blog\/solidres-now-speaks-25-languages\">wrote about in July<\/a> is in the box: every locale at full parity with en-GB across the component, the modules and every add-on plugin, with consistent terminology throughout \u2014 and the new Channel Manager, Inventory and Rate Plan strings translated along with everything else.<\/p>\n\n<p><strong>The modern date picker is everywhere.<\/strong> The <a href=\"https:\/\/www.solidres.com\/blog\/a-modern-date-picker-for-solidres\">zero-dependency range picker<\/a> now covers the whole booking funnel, the search modules, the hub, the admin reservation form and the availability calendars, with an OTA-style occupancy popover on the search bar. Every remaining single-date field moved to Joomla&#8217;s own native calendar. The old jQuery UI engine is still there as the Legacy option, so nothing changes under you until you switch.<\/p>\n\n<p><strong>Dark mode across the component.<\/strong> The remaining hard-coded colours in the core stylesheets and the Lumina booking views are tokenised, with proper overrides under both <em>prefers-color-scheme<\/em> and Joomla&#8217;s own dark theme. Light mode is pixel-identical to before.<\/p>\n\n<h4>Fixes that matter<\/h4>\n\n<p>Roughly two dozen real bugs, several of which were blocking people outright:<\/p>\n\n<ul>\n\t<li><strong>Rate Plan:<\/strong> creating a rate plan with no check-in day restriction silently failed to save and reloaded the list with no message. It saves, and the editor now tells you when something goes wrong. Rate plans are also honoured everywhere again on a site that migrated off the legacy Complex Tariff editor \u2014 previously the frontend pricing pipeline quietly fell back to default-tariff-only mode and ignored them.<\/li>\n\t<li><strong>My Profile:<\/strong> a logged-in customer clicking <em>My Profile<\/em> got a 404. Fixed, and a customer can now only edit the profile row they actually own.<\/li>\n\t<li><strong>Availability calendar:<\/strong> the check-out diagonal disappeared for every reservation that spanned two months. It is back.<\/li>\n\t<li><strong>Dates shifting by a day:<\/strong> saving a date in an admin field could store the day before it, for anyone east of UTC. Fixed \u2014 calendar dates now round-trip exactly.<\/li>\n\t<li><strong>Router:<\/strong> SEF links built for a plugin-owned view could fatal outright. Experience links in particular now build correctly with no com_solidres menu item.<\/li>\n\t<li><strong>Update checker:<\/strong> it ran dozens of duplicate queries on every admin page load, refetched on every page when the update server was unreachable, and could cache an error response and read it back as pending updates. Rewritten, with a themed badge for the update notice instead of the old plain message.<\/li>\n\t<li><strong>File Verification<\/strong> (System view) works again, and now covers the frontend, media and API paths that never had checksums generated for them.<\/li>\n\t<li><strong>Uninstalling Solidres<\/strong> while add-on plugins and modules are still installed is now blocked, with the offending extensions listed, instead of silently stranding them.<\/li>\n\t<li><strong>Validation messages<\/strong> appear in your own language on every page that validates a form, not just the four that happened to load the locale file. 64 of Joomla&#8217;s 78 language tags now resolve.<\/li>\n\t<li><strong>Room type editor:<\/strong> deleting a room row from the Rooms tab worked again, and the add-row button has a label instead of a raw language key.<\/li>\n\t<li><strong>Hub:<\/strong> the embed form tab in the property editor rendered the wrong layout and had never run under Joomla 6. Rewritten in vanilla JavaScript, no jQuery, dark-mode safe.<\/li>\n\t<li><strong>Beds24:<\/strong> a booking the channel already collected payment for is now marked paid, with the amount mirrored into the payment history, and payment reminders no longer chase a settled booking.<\/li>\n\t<li><strong>Feedback:<\/strong> deleting a reservation with the Feedback plugin enabled was fatal. Fixed.<\/li>\n\t<li><strong>Sample data<\/strong> is now a single generated file, imported inside a transaction \u2014 a half-imported sample set used to leave you stuck with no way to retry.<\/li>\n<\/ul>\n\n<h4>Security<\/h4>\n\n<p>4.2.0 is also a security release. In summary, and without the detail that would help anyone reproduce them:<\/p>\n\n<ul>\n\t<li><strong>Image uploads<\/strong> are validated by extension against a hard allow-list <em>and<\/em> by decoding the actual bytes, rather than trusting what the browser said the file was.<\/li>\n\t<li><strong>The media manager<\/strong> now only accepts record field names from a per-type allow-list, checks a form token on every task, and requires edit or create rights rather than just the right to open the screen.<\/li>\n\t<li><strong>Frontend controllers<\/strong> that inherit from administrator controllers now publish an explicit list of permitted tasks and refuse everything else, so back-end methods are no longer reachable under a site task name.<\/li>\n\t<li><strong>Payment gateway callbacks<\/strong> got a systematic pass: signatures and secure hashes are verified before anything is written, an unconfigured shared secret counts as a failure rather than an exemption, every callback is bound to the reservation it names, retried callbacks change nothing, and the amount is checked against what is actually owed. This runs through a shared, unit-tested settlement path instead of being restated \u2014 or omitted \u2014 per gateway.<\/li>\n\t<li><strong>The refund endpoint<\/strong> requires a form token and a genuine refund right, and refuses a booking with nothing captured to send back.<\/li>\n\t<li><strong>Channel manager inbound deliveries<\/strong> are authenticated, and the channel console endpoints require a signed-in manager of that property plus a token.<\/li>\n<\/ul>\n\n<p>Merchants running a gateway with no secure hash or shared secret configured should configure one before updating: those callbacks are now refused rather than trusted.<\/p>\n\n<h4>Update today<\/h4>\n\n<p>Solidres 4.2.0 needs Joomla 6 and PHP 8.4. Update from the Joomla updater as usual, or download it from your solidres.com account \u2014 the full changelog ships with the release.<\/p>\n\n<p>If you are a subscriber, you already have the Rate Plan, Limit Booking, Front Desk and Dashboard plugins that the Channel Manager builds on. If you are not, <a href=\"https:\/\/www.solidres.com\/subscribe\/levels\">a subscription<\/a> is what brings them, along with the templates and support. And if selling on Booking.com, Expedia, Airbnb, Agoda or Vrbo from inside Joomla is what you have been waiting for, <a href=\"https:\/\/www.solidres.com\/subscribe\/channel-manager\">the Channel Manager is ready<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Solidres 4.2.0 is out. It is a big one \u2014 not because of a single headline feature, but because it is the release where several things we have been building in the open all summer finally land in the stable channel at the same time: 25 languages, the new date picker, dark mode across the [&#8230;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/posts\/1259"}],"collection":[{"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/comments?post=1259"}],"version-history":[{"count":2,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/posts\/1259\/revisions"}],"predecessor-version":[{"id":1268,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/posts\/1259\/revisions\/1268"}],"wp:attachment":[{"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/media?parent=1259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/categories?post=1259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/tags?post=1259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}