Changelog

  1. 1.3.1

    Stable

    A maintenance release: no schema changes and no storefront changes. It adds the order backlog to the Joomla administrator dashboard, teaches the order screen to render the payment entries the gateway plugins record, and moves the shared payment-callback form field into the component so two payment plugins can ship the same field without colliding.

    Added

    • Order backlog quick icons: new bundled plugin plg_quickicon_solidshop puts the shop's backlog on the Joomla administrator home page — three tiles counting Pending, Unpaid and Unfulfilled orders, each linking to exactly the rows it counted. Pending is on by default and reads the same Options → Pending order status the dashboard alert uses, so the two can never disagree; the other two tiles are opt-in. The panel it appears in (Third party / Site / System / Notifications) is a plugin option, and a tile is never shown to a user the orders list would 403.
    • Payment entries on the admin Activity Timeline: captures recorded by the payment plugins now render as readable lines instead of blank generic rows — a partial payment says so, a webhook-reconciled capture names the webhook, an inline confirm at checkout stays unqualified, and the gateway transaction id prints underneath in muted type for copying into the gateway dashboard.

    Changed

    • Library: OrderDescriptor builds the description a gateway shows in its own dashboard from the store name and the order reference, trimming the store name (never the reference) to fit each gateway's field limit; OrderTimelineHelper::log() gained a dedupeOn parameter so a capture reconciled twice logs one entry; FulfillmentStatus joins PaymentStatus in Solidshop\Lib\Status instead of the seeded code being hardcoded at call sites.
    • Orders ACL funnels through OrdersModel::authorise(), the same shape as ReportsModel::authorise() — one seam per feature where a per-store restriction attaches when multi-vendor lands.
    • The callbackurl form field type moved out of the PayPal plugin into the component (Joomla\Component\Solidshop\Administrator\Field\CallbackurlField) and gained a payment XML attribute; its language keys moved to com_solidshop.ini across all 23 locales. Joomla resolves field types from one global prefix stack, so two payment plugins shipping the same type name collided.

    Upgrade notes

    • The core package gains plg_quickicon_solidshop. It publishes itself from its own scriptfile on first install, so sites updating from 1.3.0 get the tiles too; every later update arrives as an update, so tiles you switch off stay off.
    • Payment plugins must be current for the timeline entries to appear: Stripe 1.0.0 and PayPal 1.0.2 are the versions that record them, and both pin 1.3.1 as their minimum core.
    • Update PayPal to 1.0.2 alongside this release. PayPal 1.0.1 and earlier still ship their own callbackurl field class, which now collides with the component's — the symptom is a Webhook URL field on another payment plugin's tab rendering PayPal's URL.
  2. 1.3.0

    Stable

    Added

    • Custom fields on products: define product attributes in Joomla's own Custom Fields screens (all 19 field types, validation, view levels, groups, ordering, language assignment). Values save and roll back with the product, render in a storefront Specifications tab, emit Schema.org additionalProperty on the product's JSON-LD node, index into Smart Search (value and/or facet per field), round-trip through CSV as Field: {name} columns, and read/write through the REST products API. {field N} / {fieldgroup N} placeholders work in descriptions
    • Custom fields at checkout: an Additional information panel collects order-level input (gift message, delivery slot, PO number) — required/pattern rules enforced server-side before the order is created
    • Custom fields on addresses: address book, admin customer screen and both checkout addresses; each field can be restricted to shipping, billing, or asked on both
    • Custom fields on order lines: per-item input on the product page (engraving, recipient, date), assigned to products via the field's Category assignment. Lines with different answers stay separate cart lines and draw on shared stock; identical answers merge. Editable from the cart; shown in cart, mini-cart and checkout summary
    • Captured values are frozen onto the order with their labels — renaming, retyping or deleting a definition never rewrites a placed order. They appear on the order screen (editable with the same validation, timeline-logged), the customer's order detail, the confirmation and shipment emails; per-field switches gate each surface
    • Related products: pick and drag-order suggestions on a product's Related tab; shown as ordinary product cards under the description. One-directional by default with an opt-in "both ways" display option resolved at read time — nothing is written to the other product, unlike HikaShop's mirror rows. Storefront visibility rules apply (unpublished / windowed / access-restricted products drop out); enabled and sized via Options → Products
    • Currency switcher: new module mod_sshop_currency (dropdown or links; labelled by code, sign, name) lets shoppers read catalogue, cart and checkout in any published currency that has an exchange rate; the sidebar price filter follows. Display-only: the order, invoice, emails, reports and the gateway amount stay in the store currency — stated with the exact amount at checkout. Hides itself when only one currency qualifies
    • Catalog REST API: read-only GET v1/solidshop/products|categories|brands (+ :id, products/:id/variants) with search / category / brand / price / stock filters, lang and currency args, served by the rebuilt plg_webservices_solidshop. Guest-visible data only — no cost prices, no stock quantities (boolean in_stock), no customer or order data. Public by default; a Public catalog access plugin switch gates everything behind Joomla API tokens instead
    • MCP server: POST v1/solidshop/mcp exposes the catalog to AI agents as five read-only tools (solidshop_search_products, solidshop_get_product, solidshop_list_categories, solidshop_list_brands, solidshop_get_store_info) over stateless Streamable HTTP. Same shapers and visibility rules as the REST layer; every response carries the canonical storefront URL, so agent referrals land on the merchant's own pages

    Changed

    • Product descriptions now run through Joomla's content plugins (this is what renders {field N}); Options → Run content plugins on product descriptions turns it off if literal {…} braces matter
    • The order confirmation email gained an Additional information block and per-line custom fields under each item; the shipment email lists them per shipped item. Customised bodies are offered the change via the editor's drift banner
    • Stock checks now sum every cart line of the same product instead of checking each line alone — with per-line fields one product can sit on several lines. Same correction for admin order-product edits

    Fixed

    • Address forms posted radio groups, checkboxes and multi-selects incorrectly — every radio in a group and every checkbox, ticked or not
    • Product cards in listings emitted an empty priceCurrency in their microdata; they now carry the store's currency code

    Upgrade notes

    • Schema: nullable JSON custom_fields columns on #__sshop_orders / #__sshop_order_products, and the new #__sshop_product_related table (both sides cascade on delete)
    • The core package gains mod_sshop_currency (installs unpublished, like every module) and plg_webservices_solidshop (enabled on install; disabling it removes all API routes)
    • Currency switching is display-only by design; Joomla's System - Page Cache plugin serves one cached copy per URL to all guests, so leave it off on priced pages if you publish the switcher
    • Related products are not yet in the CSV columns or the REST products API; listing pages cannot yet filter or sort by a custom field value (Smart Search facets cover narrowing inside search results)
  3. 1.2.0

    Stable

    Added

    • Reports: new admin screen with four reports over a date range — sales by period (day / week / month), sales by product, tax collected, sales by payment method — each downloadable as a self-describing CSV. Payment-status scoped, store-scoped, one section per currency (never summed across); plugins can register more via onSolidshopReportRegister
    • Smart Search: new bundled plugin plg_finder_solidshop indexes products into Joomla's site-wide search (com_finder) — live sync on save/delete/publish, storefront-visibility parity, per-language entries, and Type / Category / Brand / Language filters
    • SEO: native XML sitemap of product and category URLs at view=sitemap&format=xml — sharded index, honest per-product lastmod, guest-visibility parity, per-language alternates, plus a per-store SEO tab and an Options → Sitemap fieldset
    • Mini-cart: mod_sshop_cart gains an off-canvas drawer — line items, quantity stepper, tax-adjusted estimated total including discounts, View cart / Checkout — updating live via the new onSolidshopCartChanged document event. Legacy badge-only behaviour stays available via the Display mode option
    • Cart: coupon field plus subtotal / discount / estimated-total rows on the cart page, so automatic discounts are visible before checkout; a code applied in the cart carries into checkout. Location-restricted codes are accepted with a "Confirmed at checkout" hint
    • System: cache-directory health check with one-click repair — reports the Twig and email cache areas with owner and mode, and the chown command for what PHP cannot fix itself

    Changed

    • Currency is now a store property, set on the Store edit screen; the global "Default currency" option is removed and migrated automatically on update (if the two disagreed, the option's value wins — that is what orders were placed in). Storefront behaviour is unchanged
    • Dashboard KPIs, sales chart, top products and customer insights now use the Reports engine and its payment scope. Revenue reads lower than in 1.1.x — pending, unpaid and abandoned-at-payment orders no longer count as revenue. Revenue and AOV cover the store currency only; in-scope orders in other currencies are flagged with a link to Reports
    • Cart badge counts units (sum of quantities), not lines; cart.add / cart.update expose the same value in a new count field
    • Shipping: a profile with no assigned products covers the whole catalogue, so the store page shows it as a plain badge instead of an alert — the warning invited a "fix" that broke shipping
    • Account: removed the "Payment Methods" page, which only ever showed "Coming Soon"; the sidebar highlight now follows the layout that actually rendered
    • System: every filesystem path renders through one layout — LTR-locked, escaped, JPATH_ROOT stripped

    Fixed

    • Checkout: an unwritable cache/com_solidshop directory aborted checkout and payment callbacks; templates now recompile per render and log instead of throwing
    • System: the "Menu items" panel matched the wrong view for Customer Profile, omitted Products, and hid unpublished or trashed items — all states are reported now, badged, and scoped to site menus
    • Shipping: the seeded sample rates capped order value in every non-domestic zone, so carts above it matched no rate and checkout offered no shipping. Rebuilt as five gapless zones covering 77 countries
    • Coupons: an invalid code no longer reports "Coupon applied!" when an unrelated automatic discount happens to be active
    • Cart / checkout: load the SweetAlert preset so Solidshop.alert dialogs render as dialogs, not unstyled text at the page bottom
    • Translations: 110 new keys synced to all 22 locales; el-GR double-escaped ampersands at checkout, de-DE carried a raw & in markup, hi-IN mistranslated Subtotal. build/validate.php now checks placeholder parity and ampersand encoding
  4. 1.1.0

    Stable

    Added

    • Products: CSV import and export — one file, one row per variant, with auto-mapping of Shopify/WooCommerce headings, per-language Name [xx-XX] columns, and chunked processing so large catalogues import without timeouts. Empty mapped cells leave stored values alone, so a two-column alias+price file is a safe bulk update.
    • Installer: uninstalling the Solidshop package is now blocked while Solidshop add-on plugins are still installed — the error message lists them, so add-ons are removed first and never left stranded without the core tables and library their own uninstall depends on.

    Changed

    • Product listing: build cards from the listing row instead of a per-card detail-model round trip (82 fewer queries on a 20-card page); mod_sshop_products gets the same win.
    • Product listing: share one visibility predicate between the list and detail queries so a draft, scheduled, or category-unpublished product no longer 404s the whole page.
    • Product List menu item: honour the menu item's category selection (was ignored — every menu item listed all products).
    • Wishlist: join what the cards read and batch variant options instead of per-row detail-model lookups; one unpublished wishlisted product no longer 500s the page — it is left out like the listing already does.
  5. 1.0.6

    Stable
    • Security: fix SQL injection via cart option values (reported by Krzysztof Zając, CERT PL)
    • Shipping: product-level profile assignment covers all variants, tri-state variant picker
    • Shipping: match rates against total shipment weight (variant weight x quantity, summed per profile)
    • Shipping: match every state of a multi-state zone region, not just the last
    • Shipping: rate-less zones return empty instead of TypeError, drop unpriced carrier rates
    • Checkout: mirror the shipping address when no separate billing address was supplied
    • Checkout: URL-encode the guest email so plus-addressed buyers can check out
    • Address: require address_1 and city, filter both as string
    • Product listing: show star ratings on product cards
    • Orders: drop the foreign keys from status columns to #__sshop_statuses
    • System: link multi-routine task plugins in the Task Scheduler health check
  6. 1.0.5

    Stable
    • Install: load language in postflight, require Joomla 6.0.0 stable
    • SEO: merge review rating into the single Product JSON-LD node
    • PayPal: capture reconciliation via webhooks, min core version on install
    • Checkout: close the inventory oversell race
    • Install: scope postflight menu lookup to site items (client_id=0) so admin submenu links don't falsely skip site menu creation
    • Install: remove site menu items on uninstall + auto-publish core payment plugins (COD/Bank Transfer) on fresh install
    • Orders: admin list filters for order/payment/fulfillment status, store and created date range
    • Orders: translate invoice_email_sent timeline entry in admin order view
    • Orders: store activity-timeline timestamps in UTC to fix +7h timezone offset in admin display
    • Admin menu: reorder submenu into logical groups and sync with preset
    • Checkout: store-scoped policy consents
    • Responsive admin lists: admin list views now reflow into mobile cards below the md breakpoint via a shared %solidshop-list-cards SCSS placeholder
  7. 1.0.4

    Stable
    • Payment: add per-plugin logging facility, instrument COD + bank transfer
    • Core JS: dark-mode aware SweetAlert dialogs + prettier pass
    • Search module: match input height to submit button
    • Admin menu - Menu preset
  8. 1.0.3

    Stable
    • Add Bank Transfer to the Core installation package
    • Discount: move action_scope field to plg_solidshop_discount
    • Discounts: alias 'published' to 'state' on DiscountTable so toolbar publish/unpublish works
    • Products: expose variant SKU input in product edit variant table
    • Products: hide media section and silence thumbnail warning when product has no renderable media
    • Products: replace base64+atob share button pattern with TEMPLATE tag clone
    • Customer: declare core.edit.value ACL and remove com_fields force-enable workaround. Customer edit form no longer force-enables every custom field on the site client. The core.edit.value ACL on the com_users asset is now respected — admins must grant core.edit.value to the customer user group (Users → Options → Permissions) so logged-in customers can fill or update Joomla custom fields on their profile.
  9. 1.0.2

    Stable

    First public release of Solidshop. This entry establishes the baseline that all future changelog entries are deltas against.

    • Single-store catalog with products, options, variants, brands, categories, and per-SKU product stats.
    • Multi-step cart and checkout with guest support, address book, shipping rate selection, and order-time tax calculation.
    • Customer accounts linked to Joomla users — order history, address book, and wishlists.
    • Order lifecycle with order, payment, fulfillment, and return statuses, plus per-order timeline.
    • Tax engine with classes, zones, and zone × class rate resolution (inclusive/exclusive pricing).
    • Shipping engine with profiles, zones, regions, and rate tiers.
    • Stackable discount engine with pluggable conditions and actions.
    • Auto-generated invoices with credit-note support.
    • Wishlists for logged-in customers.
    • Customisable email notification templates editable from the admin — order confirmations, shipping updates, and status change emails.
    • Store dashboard with KPI cards, sales analytics, recent orders, product insights, and a plugin-extensible widget system.
    • Granular Joomla ACL integration across every admin view (view, create, edit, delete, publish, manage).
    • Product Filters module for category-page filtering by category, brand, price, rating, and tags.
    • Built-in payment plugins: Bank Transfer, Cash on Delivery.
    • Storefront translations for 23 languages including full RTL support (Arabic, Hebrew, Persian).
    • Multilingual content — translate product, category, option, status, and email-template text with per-language slugs, hreflang tags, and recipient-language emails.
    • SEO-optimised storefront — clean URLs, semantic H1 hierarchy, canonical tags, Open Graph and Twitter cards, dynamic stock availability, and Product/Offer JSON-LD structured data.
    • WCAG 2.1 AA accessibility — semantic landmarks, ARIA attributes, full keyboard navigation, visible focus states, and a contrast-preserving dark-mode palette.
    • Joomla 6.x native; requires PHP 8.4 and MySQL 8.4 / MariaDB 11.4+.