2.11.4 (November 7, 2026)
- Fix: PHP deprecation error in the order list when filtering by transaction date without a transaction reference
- Fix: A deactivated member (whose platform access had ended) buying the platform access again as a guest, with the email of their account, got "Order not found" from the order details step on: the order was given to the deactivated account as soon as it was saved, which left it without an owner who could continue. The order (and its subscription) now stay the guest's until the payment completes them; the payment then gives them to the account and reactivates it, and the guest sees the confirmation page with the "Log in" button
2.11.3 (November 7, 2026)
- Fix: A running subscription whose product was deleted (a hard delete takes the subscribed item with it) blocked the customer from buying any other subscription product (the "Add to cart" button refused, and the checkout with it), and its page, its edit page in the administration and its emails failed with "Attempt to read property "name" on null"; such a subscription now gives access to nothing, cannot be renewed, and its pages show "Deleted product"
- Fix: A subscription to a product moved to the trash could still be renewed ("Renew", "Subscribe again"): a product in the trash is not for sale until it is restored
- Fix: The administrator's summary of an automatic renewal (recurring payment) subscription showed the "Notification before expiration" row, which is for renewals by hand ("Disabled"), next to the "Notification before the charge" row: only the latter is shown
- Enh: The product form says, under an empty "Notification delay before the charge", that no email is sent before an automatic charge
- Enh: Translations
2.11.2 (November 6, 2026)
- Enh: A notice before an automatic renewal (recurring payment) charges the customer, which had none (the "notification delay before expiration" is for renewals by hand only): a new product setting, "Notification delay before the charge (in days)" (
subscription_notification_delay_before_charge, a migration adds the column; 7 days before a monthly charge and 30 before a yearly one is common, card networks ask for 7 to 30). The email (subscription-renews) gives the amount and the date of the next payment and a button to the subscription page, where it can be stopped. Both come from Stripe that day: the date is Stripe's period end, the amount its preview of the next invoice (coupons, the customer's credit balance and taxes counted), else what the latest paid order cost. It is sent from x days before the charge until the charge, once per period, and not when the payment is already failing, the subscription is canceled or set to end in Stripe's Billing Portal (cancel_at_period_end, cancel_at), or Stripe does not answer (the next run tries again). The date and amount travel in the notification's payload, which the notification serializes itself (HumHub's queue keeps only the source and the originator)
- Enh: The checkout says, as the hint of the automatic renewal checkbox (a paragraph of its own when the renewal is forced), that the subscription can be stopped at any time from the customer's account and, when the product has a notification delay before the charge, that an email comes that many days before each renewal
- Fix: The notification before the end of a period and the one on the expiration date were sent once for the whole life of a subscription (their "sent" flags were never reset): a renewed subscription is notified again each period
2.11.1 (November 4, 2026)
- Fix: "Order not found" error when a guest submitted a checkout step after their session had expired: the checkout forms of a guest order now use the signed checkout URL
- Fix: Guests were sent to the login page by the "Back to order" button of the checkout and PayPal pages (the order page of a guest is for the vendor administrators): it is hidden for guests, and a guest whose session expired gets their cart back ("Back to cart"); a guest reopening the checkout of a paid order, or confirming a free order twice, is sent to the store instead of the login page
2.11.0 (November 3, 2026)
- Enh: Ready-made invoice and payment receipt templates, loaded into the editor from a dropdown above it: United States, Germany and France (each with a variant without VAT for small businesses) and international sales in English; the language of the documents follows the template (cuzy-app/humhub-suneditor 1.4.1)
- Enh:
{customerName} template tag: the buyer's display name, or the first and last names of a guest (for the payment receipt, which has no invoice tag such as {invoiceName})
- Enh: The line breaks of the "Legal notice for the documents header" are kept in the documents
- Fix: The subscription page showed the product's catalog price instead of the price paid (for a free-price product, its minimum)
- Fix: Reviewed French, German, Spanish, Portuguese, Brazilian Portuguese, Italian and Dutch translations (wrong meanings, HumHub terminology, consistent wording and form of address); Traditional Chinese is now actually in Traditional Chinese and Norwegian Nynorsk in Nynorsk (they were copies of Simplified Chinese and Bokmål)
- Fix: Unclear error message when another active subscription with the same items already exists
- Fix: Stray "}" in the message displayed when the maximum number of selectable products is reached
- Fix: Guests were asked to log in to read the Terms of Sales from the checkout
2.10.11 (October 29, 2026)
- Enh: Order and subscription status emails to vendor administrators name the purchased products; the subscription email also gives the payment recurrence and the latest order
- Enh: Order cards always show the items button (subscription orders too) and a one-line summary of the purchased products, with the full list in a tooltip; the order page lists the items of a subscription order
- Fix: Long payment method labels on order cards wrap instead of squeezing the "Method" label
- Fix: The "Automatic renewal by recurring payment" checkbox could disappear from the checkout of a discounted subscription order (amounts compared as floats instead of in cents)
2.10.10 (October 26, 2026)
- Enh: Requirements check fails when PHP's regex JIT is unusable (e.g.
MemoryDenyWriteExecute=yes in Ubuntu's apache2.service), which made pages such as the invoice PDF download fail at random; fix: set pcre.jit=0
- Enh: Vendor setting for the language of invoices and payment receipts; defaults to the buyer's language (previously the language of whichever request completed the order)
- Enh: A completed checkout order sends one email (contract confirmation including the payment confirmation) instead of two; no separate
order-paid email for it
- Enh: Vendor list in the eCommerce administration shown as cards, readable on mobile
- Fix:
{orderDate} is written in full ("October 26, 2026"), like {invoiceDate}
- Fix: Deleting a user with orders failed on platforms without first/last name profile fields
- Fix: IPinfo country validation was skipped when an order manager placed their own order
- Fix: Contract confirmation used the site's default language and time zone instead of the buyer's; withdrawal texts translated into French and German
- Fix: Invoice and receipt template editors keep a white page in dark mode (cuzy-app/humhub-suneditor 1.3.2)
- Fix: Permanently deleting an order or product left its followers behind
- Fix: Permanently deleting an unpaid order also deleted the guest and subscription still used by another order in the trash
- Chg: Removed the
FollowableTrait workaround, fixed in core since HumHub 1.19 (humhub/humhub#8539)
2.10.9 (October 22, 2026)
- Enh: The PayPal setup help separates the Sandbox and Live steps (a sandbox merchant account is for testing only; a Live app belongs to the PayPal Business account receiving the payments) and says that the client ID, secret key and webhook must all come from the mode chosen with the "Live mode" checkbox
- Enh: A vendor's custom payment methods can be kept for administrators ("Only administrators can choose these methods"): they are not offered at checkout, and the checkout refuses a method it does not offer (a method meant to record payments received elsewhere was offered to customers, who could choose it and leave an order awaiting a payment nobody would collect)
2.10.8 (October 22, 2026)
- Enh: The contract confirmation and the withdrawal emails have a title and spaced paragraphs (some email clients ran them together), the withdrawal consent stands out as a quotation and "Withdraw from contract here" is a button
- Enh: The order status emails to a customer are laid out like the other emails: no rule under the title when no person sent them, spaced lines, a box with the order reference, date, products and total once paid, "See order" and a lighter "Download the invoice" side by side at the end, and the purchased access as a link (a list when there are several) instead of a button named after each product
2.10.7 (October 22, 2026)
- Enh: The invoice and payment receipt PDF templates are HTML, edited with SunEditor (
cuzy-app/humhub-suneditor): tables, classes, inline styles and a <style> block (code view) give the documents their own layout and fonts (@font-face rules pointing to TrueType files). The migration converts each vendor's Markdown template into the HTML it rendered to, so existing PDFs look the same; invoices already issued keep their content. The values of the tags are HTML-escaped (the email, the tax number, the product and vendor names were inserted as typed)
- Fix: The fonts a PDF loads (
@font-face, and the Noto fonts of non-Latin texts) are kept in @runtime/ecommerce/pdf-fonts: Dompdf kept them in its own folder inside the module, which a Docker image makes read-only, so they were downloaded again for every PDF or not used at all
- Fix: A PDF holding an image failed when the site has no logo (e.g. in a queue job:
Url::to() of an empty logo URL needs a web request)
- Fix: The platform logo (
{platformLogo}) in emails broke once the published assets were removed, e.g. by the cache flush after every update; it now uses the absolute image URL, which stays valid since HumHub 1.19.1 and which the PDF invoices embed as before (core: humhub/humhub#8594)
- Fix: When several vendors share one Stripe account (one webhook endpoint per vendor), a tax number event only updates the orders of the endpoint's vendor, so the "tax number could not be verified" alert is no longer sent once per vendor
- Fix: In the cart, a long discount code no longer overlaps its value (the discounts list is a table sized to its content instead of three fixed columns in 300 px)
2.10.6 (October 16, 2026)
- Fix: Cancelling an
expired subscription that Stripe is still retrying (its Stripe id still set, 2.10.0's retry design) now stops it on Stripe too, like cancelling a running one; a later retry no longer charges the customer for a subscription HumHub shows as canceled
- Enh: The event
ecommerce.mail.beforeCustomerMail (Module::EVENT_BEFORE_CUSTOMER_MAIL, events\MailEvent) fires right before each email to a customer (the order status notifications, the subscription notices, the contract confirmation, the withdrawal acknowledgement) with the email's key, the composed message, the recipient, the order or subscription and the placeholder values; a listener may log it or send its own email and set handled, so eCommerce sends nothing (the web notification stays). EcommerceBaseNotification::getMailKey() / getMailParams() name and describe each email
2.10.5 (October 15, 2026)
- Enh: Online withdrawal function (Directive 2011/83/EU Art. 11a, from Directive 2023/2673): "Withdraw from contract here" on the customer's order page during the 14 days after a paid order, a "Confirm withdrawal" step, an acknowledgement on the page and by email with the content, date and time, an email to the vendor's users to notify, and the event
ecommerce.order.withdrawalRequested (Order::EVENT_WITHDRAWAL_REQUESTED); migration m261015_150000_add_withdrawal
- Enh: Confirmation of the contract on a durable medium (Art. 8(7)): when an order placed through the checkout is completed, the buyer receives one email with the order, the withdrawal consent, the withdrawal link and the vendor's terms of sale as a PDF (
jobs\SendContractConfirmation, services\WithdrawalService)
- Fix: The checkout button that places a paid order reads "Order with obligation to pay" instead of "Proceed to payment", as Directive 2011/83/EU Art. 8(2) requires ("Zahlungspflichtig bestellen", "Commander avec obligation de paiement")
- Enh: Template tags
{ifWithdrawalConsent}…{/ifWithdrawalConsent} (kept only when the buyer gave the right-of-withdrawal consent at checkout) and {withdrawalConsentDate}, so a vendor's payment receipt or invoice confirms that consent on a durable medium, as Directive 2011/83/EU Art. 8(7) and 16(m) require
2.10.4 (October 14, 2026)
- Enh: Event
ecommerce.order.documentTags (Order::EVENT_DOCUMENT_TAGS, class-level) fired while an invoice, a payment receipt or an order email is built from a vendor template: a module that sells through eCommerce adds its own template tags, lines under an item of {purchasedItemSummary} and blocks after that table (e.g. the licence key, the licensed domain and the maintenance end of each item), see docs/?#developer "Events"
- Enh: Event
ecommerce.order.beforeInvoice (Order::EVENT_BEFORE_INVOICE) fired before the invoice of a completed order is created: a listener whose data is not ready yet postpones it (the order is flagged "Invoice pending", column invoice_pending, and the customer's order page says so), then calls Order::createPendingInvoice() once the data exists, so the invoice is never frozen with a missing value and no number is wasted
- Fix:
{purchasedProductNames} was empty on the invoices, receipts and emails of a subscription order
- Fix: Recurring payments were accepted on the server for any payment method; they are now Stripe only (PayPal and the offline methods pay one period), as the checkout form already showed
2.10.3 (October 13, 2026)
- Fix: Subscriptions paid with Stripe: guest's subscription stays with the guest
- Enh: A module that puts a product in the cart can send the customer back to its own page instead of the store (the cart's "Back" button, when the cart is emptied, and a "Continue" button after the payment)
2.10.2 (October 11, 2026)
- Enh: Product option "Allow several subscriptions per customer" (subscription settings, off by default): a customer can buy the product again while a previous subscription to it is running, and each purchase becomes a separate subscription with its own renewals instead of renewing the running one (e.g. one subscription per hosted website); renewing an existing subscription still renews that one
2.10.1 (October 8, 2026)
- Chg: New CUZY Commercial License 2.0 under Irish law. It clarifies the AGPL option, the license key with annual or lifetime maintenance and what happens when it expires, one installation per domain with unlimited users and devices, and commits to fixing module bugs within 14 days for customers with a valid license key. Existing licenses stay under version 1.0 until their next renewal or opt-in
- Enh:
SECURITY.md (how to report a vulnerability, the support period), the same section in docs/?#description, and a workflow attaching a CycloneDX software bill of materials to every GitHub release (Cyber Resilience Act)
2.10.0 (October 6, 2026)
- Enh: Events for other modules:
Order::EVENT_STATUS_CHANGED, Subscription::EVENT_STATUS_CHANGED, Subscription::EVENT_RENEWED and Subscription::EVENT_PAYMENT_FAILED (see docs/?#developer "Events"), so a module selling through eCommerce reacts to payments without polling
- Enh: New subscription status "Past due": when a recurring payment fails, Stripe retries and the subscription keeps its Stripe subscription instead of collapsing into "Canceled"; access remains until the expiration date (plus the product's access removal delay), and the subscription returns to "Active" when a retry succeeds. A past-due subscription counts as running everywhere an active one does (e.g. no duplicate purchase of a similar subscription)
- Enh: Stripe Billing Portal: an "Update payment method" button on the customer's subscription page (and in the renewal emails) opens Stripe's hosted portal to change the card or see the invoices;
Subscription::getBillingPortalUrl() for other modules. Requires the Customer Portal to be activated in the Stripe dashboard (Settings > Billing > Customer portal)
- Enh: "Pay this invoice" button on a past-due subscription and in its emails, linking Stripe's hosted invoice page (
Subscription::getHostedInvoiceUrl())
- Enh: Right-of-withdrawal consent at checkout for digital services (EU consumers): a sentence per vendor, an unticked required checkbox, the time of consent stored on the order and shown in the order administration
- Enh:
SubscriptionHelper::findActiveForUserAndProduct() returns a user's running subscription for a product
- Enh: The keyword search buttons of the filters get no tab stop anymore, like in core (Enter in the keyword field submits the form) (core: humhub/humhub#8436)
- Enh: The "Proceed to payment" link in the emails sent to guests is a personal link, so the guest can pay from any device
- Fix: The default product image is stored in the data mount and published by the asset manager (core
AssetImage), so it works when the uploads or assets folders are outside the webroot (e.g. Docker or S3 installations). An image uploaded with a previous version is imported automatically
- Fix: Duplicate entry error for
user_follow when saving an order or product via a form model (core unique index since HumHub 1.18.6, core fix: humhub/humhub#8538)
- Fix: Security improvements; After updating, check that the "PayPal API app Webhook ID" of each vendor matches the webhook configured in the PayPal app, otherwise PayPal webhooks are rejected (refunds and payment status updates are not synchronized anymore)
2.9.6 (September 15, 2026)
- Fix: Behind the Cloudflare proxy (or another reverse proxy) the invoice address country check and the IP address stored with an Order used the proxy address instead of the visitor one; the proxy can now be declared under "Visitor IP address" in the module configuration
- Fix: Order notification emails (e.g. to guest buyers) were sent with an empty From address and never applied the reply-to address, because they read the pre-1.18 mailer setting keys that core's migration renamed and deleted
2.9.5 (September 13, 2026)
- Fix: Deleting a user could fail with "Implicitly marking parameter $errorCorrectionLevel as nullable is deprecated" on PHP 8.4+, because generating the Order permalink QR code (used when building the invoice content) triggered a PHP deprecation notice in the
2amigos/qrcode-library dependency that Yii turned into a fatal error, aborting the queued DeleteUser job; the library is now upgraded to v4.0, which fixes the deprecation (now requires PHP 8.3+)
2.9.4 (September 4, 2026)
- Enh: Upgrade stripe/stripe-php library (v19.4.1 => v21.3.1)
- Enh: Change Stripe API version from
2026-02-25.clover to 2026-08-26.dahlia (upgrade required on https://dashboard.stripe.com/developers)
- Fix: Stripe subscription expiration date on multi-item subscriptions: the earliest item
current_period_end is now used, instead of always taking the first item's one (the comparison was made on a non-existent expiration_date field)
2.9.3 (September 3, 2026)
- Enh: Upgrade dompdf/dompdf library (v3.1.4 => v3.1.6)
- Enh: Upgrade stripe/stripe-php library (v19.2.0 => v19.4.1)
- Fix: The Stripe and PayPal API secrets are no longer echoed into the vendor configuration form once saved, so they cannot be revealed or copied by another admin; the form keeps the stored values when the fields are left unchanged
2.9.2 (July 26, 2026)
- Chg: The "Buy access to this platform" button is now displayed under the login form even if the User is allowed to register
- Enh: Use HumHub "OR" devider instead of
<hr> tag between the login form and the button
2.9.1 (July 16, 2026)
- Fix: Embed uploaded images in PDFs through the Flysystem store —
StorageManager::get() returns a data-mount-relative path on HumHub 1.19, so file_get_contents() on it no longer works (core: humhub/humhub#8310)
2.9.0 (July 16, 2026)
- Fix: Compatibility with HumHub 1.19
2.8.9 (June 8, 2026)
- Fix: PayPal payment method when not logged in (paying as a Guest)
2.8.8 (June 3, 2026)
- Fix: PayPal payment method when not logged in (paying as a Guest)
2.8.7 (May 20, 2026)
- Fix: Fix email notifications for HumHub 1.18.3
2.8.6 (February 27, 2026)
- Fix: Error in the log if a User or Guest has been deleted between the Stripe job queued and executed
- Fix: If an order was made as a guest and in the meantime the user logged in, switch to the logged in checkout procedure
- Fix: Labels encoding (see migration guide)
2.8.5 (February 18, 2026)
- Fix: Don't warn if Stripe API version is newer than the module one
2.8.4 (January 26, 2026)
- Enh: On the login form, if the "Your account is disabled!" warning is displayed, and it's possible to buy an access to the platform, display an additional info box
- Fix: Stripe Subscription "Next payment date" info in the admin
2.8.3 (January 25, 2026)
- Chg:
humhub\modules\ecommerce\models\interfaces\PurchasableInterface method params and return value
- Enh: PlatformAccess becomes a Purchasable Product type
- Chg: Purchasable Product type are moved into
humhub\modules\ecommerce\models\purchasables
- Fix: When a subscription expires, send a notification even if it cannot be renewed (e.g. if the user can subscribe again)
- Enh: Send email notification even if the user is disabled
2.8.2 (January 20, 2026)
- Enh: Change Stripe API version from
2025-11-17.clover to 2025-12-15.clover (upgrade required on https://dashboard.stripe.com/developers)
- Enh: Libraries upgrades: stripe/stripe-php (v19.0.0 => v19.2.0), dompdf/php-svg-lib (1.0.0 => 1.0.2) and dompdf/php-font-lib (1.0.1 => 1.0.2)
2.8.1 (January 10, 2026)
- Fix: Send renewal notification only if all conditions for the user are OK to renew
- Enh: If cannot renew, display the reason why it is not possible
2.8.0 (January 8, 2026)
- Enh: Change Stripe API version from
2025-09-30.clover to 2025-11-17.clover (upgrade required on https://dashboard.stripe.com/developers)
- Enh: Add new settings allowing to calculate the Tax automatically, via Stripe, based on the customer location, Tax Number (VAT, etc.) and product type
- Enh: Tax Number of the customer (VAT, GST and Sales tax) automatic verification via Stripe
- Enh: Tax Rate automatic calculation via Stripe
- Enh: Validate the country from the IP address via https://ipinfo.io/ API (free but requires creating an account)
- Chg:
{invoiceVat} tag in invoices is deprecated. Use {invoiceTaxNumber} instead.
- Enh: Updated translations of VAT in German and French
- Fix: Fix Stripe Jobs: ACTION_UPDATE_PRODUCT and ACTION_UPDATE_ORDER_TRANSACTIONS
- Enh: Curl requests replaced with Symfony Http Client
- Fix: Log response and request JSON formatting
- Enh:
dompdf/dompdf library upgrade (v2.0.8 => v3.1.4)
- Enh: New Invoice tags:
{ifTaxApplies}{/ifTaxApplies}, {ifNoTaxApplies}{/ifNoTaxApplies} and {ifReverseCharge}{/ifReverseCharge}
- Fix: When using payment methods other than Stripe or PayPal, the payment instructions are sent by email, but not displayed in the browser right after checking out
- Enh: When exporting a PDF such as an invoice, add support for non-latin fonts
- Enh: New module configuration option "Restrict users to manage only their own products and discounts"
- Enh: Add RichText to payment instructions, and allow attaching files or including images.
2.7.4 (November 4, 2025)
- Fix: Email notifications for the Order permalink
2.7.3 (October 6, 2025)
- Enh: Specify taxes (in percentage of each item) to Stripe checkout, when taxes are defined in the product (total amount is the same, but taxes are now specified in Stripe dashboard)
2.7.2 (October 4, 2025)
2.7.1 (October 2, 2025)
- Enh: In the product admin page, move the product type field next to the product type details
- Enh: Prevent from disabling the module for users (in the user settings)
- Enh: Allow displaying the product prices without taxes (VAT) (new module configuration option)
2.7.0 (September 2, 2025)
- Enh: Migration to Bootstrap 5 for HumHub 1.18
- Enh: Use new
ControllerHelper::isActivePath & $module?->isEnabled
- Fix: Discount deletion in the admin panel
2.6.7 (July 25, 2025)
- Fix: Stripe webhook when retrieving transaction
2.6.6 (July 23, 2025)
- Fix: Stripe API version detection
2.6.5 (July 2, 2025)
- Fix: Remove "test" in the URLs of Stripe webmaster page
2.6.4 (July 2, 2025)
- Enh: Logging (Add log for Subscription and Order, better wording and fix search query)
- Fix: Give access to product after differed Stripe SEPA payment with new Stripe webhook version
2.6.3 (June 16, 2025)
- Enh: Add filters to logging page
- Chg: When a Stripe webhook doesn't correspond to an entry in the Stripe database, send a warning to the log instead of an error
- Fix: When checking issues with Stripe or PayPal APIs in cron jobs, verify if the payment method is enabled
- Fix: Show target in logging
- Fix: Adding subscription payment from invoice webhook
- Enh: Webhook: Search transaction from Invoice metadata
- Enh: Check vendor ID when executing a webhook
2.6.2 (June 12, 2025)
- Enh: Notify and add an error to the log if API version is not working or version is different from the Stripe library
- Enh: Test if Webhook is correctly configured in the Stripe dashboard
- Fix: Webhook actions with new Stripe API "Basil" version
- Enh: In the "Stripe" modal related to transactions, add direct links to Stripe Dashboard
2.6.1 (June 12, 2025)
- Fix: If a payment is added to a subscription automatically via the webhook and that the event was triggered several times at the same time, delete the duplicates
- Enh: Show the "Stripe" button on transaction cards if allowed in profile too (and not only in admin)
2.6.0 (June 12, 2025)
- Enh: In transaction cards, replace the "Stripe" method info label with a button to open a modal with all Stripe details (for manual reconciliations with Stripe dashboard)
- Enh: Add an extra Stripe Webhook listener to change the payment status to SUCCEEDED, in case a previous Webhook failed
- Enh: Logging of main actions: changes in the database, jobs, API and webhook requests
- Enh: Upgrade stripe/stripe-php (v16.6.0 => v17.3.0)
2.5.4 (May 12, 2025)
- Enh: In the Subscription admin page, add a "Status" filter
2.5.3 (May 2, 2025)
- Fix: Guest orders layout
- Enh: In the Vendor settings, for the invoice form during checkout, add an additional custom field (optional)
2.5.2 (March 20, 2025)
- Fix: In the Order summary, for some languages, the text is too long causing the amount to overlap the next line
- Fix: On Stripe, for some specific values, the amount is reduced by 1 cent
2.5.1 (March 19, 2025)
- Fix: since 2.5.0, if payment by Stripe with a discount AND taxes, the total amount on Stripe is higher because the reduction of taxes due to the amount are not deduct on Stripe checkout
- Enh: In the Store, when taxes (VAT) applies on products, append
(tax incl.) to the price
- Enh: In invoices and receipts, add 2 tags:
orderTotalDueTaxExcl and orderTotalDueTaxInc.
- Chg: In invoices and receipts, the tag
orderTotalDue is removed (a migration automatically replaces it with orderTotalDueTaxInc)
2.5.0 (March 13, 2025)
- Enh: Add 2 new tags that can be added to invoices and receipts which displays a link of the invoice, and an URL or a QR code:
{orderPermalinkUrl} and {orderPermalinkQRCode}
- Enh: When purchasing a Platform access product, display a hint to the user about the email address to use which should be the one used to sign in.
- Enh: More explicit wording in the spreadsheet column names about the order, when exported from the transactions admin page.
- Fix: Tax calculation in case of discounts, using the Proportional allocation method (when items have different tax rates)
- Enh: Clearer Order summary when taxes and discounts are applied
2.4.7 (February 12, 2025)
- Fix: Saving "Platform access" or "Group access" products, if no group is selected
2.4.6 (February 11, 2025)
- Enh: Possibility to define a maximum number of Orders using a discount code (once reached, the discount is disabled)
- Enh: Admins configured in the Vendor to be notified are now also notified about changed Subscription status
2.4.5 (February 9, 2025)
- Enh: For "Platform access" products, add the possibility to select Groups the purchaser should be added to, once the user account is created.
- Enh: Allow selecting multiple Groups in "Access to Groups" products
2.4.4 (February 4, 2025)
- Fix: German translations (thanks to @felixhahnweilheim)
- Enh: Sort Group permissions per Vendor and display the Vendor name first
2.4.3 (January 26, 2025)
- Fix: If a subscription is created by paying with a SEPA payment, the subscription is not activated.
- Enh: Library stripe/stripe-php (v13.18.0 => v16.4.0)
2.4.2 (January 23, 2025)
Important permission change:
Users allowed to "Manage Settings" can no longer manage the eCommerce module administration. Now, they can only manage the module configuration. To manage the administration (e.g., to create a Vendor), they need to have the "Manage eCommerce administration" permission.
- Enh: Add a new "Manage eCommerce administration" permissions, which gives full permission to create or edit Vendors and manage Orders, Products and Discounts of all Vendors
- Enh: In the order exports, indicate when it's about the visitor account, and add the mobile profile field
- Fix: Column width in the user subscription and order cards view, if less than 3 columns
- Chg: "Free price" is now "Donation" if no minimum price is set, and "Minimum: $xx.xx" if a minimum price is set
- Fix: Move "Pay" button in Calendar event wall entries next to other buttons
- Fix: CSS variable overwriting the theme ones
- Enh: Encapsulate long form hints into "More info" toggle button
2.4.1 (January 3, 2025)
- Enh: When saving the Vendor admin form, if no payment method is selected, display a warning instead of automatically setting the status to "Disabled".
- Enh: Display email (if can Manage Users) in Transaction cards and Guest profile to allow comparing transactions with Stripe dashboard.
- Fix: Possibility to resend invite emails to users that haven't created the account after purchasing a product.
- Fix: User associated to the order for automatic renewal of a subscription.
2.4.0 (December 16, 2024)
- Fix: Images max width in product cards
- Fix: Column width in the order cards if less than 3 columns
- Enh: On mobile, in the admin, display only 1 column instead of 2
- Enh: Same card column height in the cards view (store, products, orders, etc.)
2.4.0-beta.4 (December 10, 2024)
- Fix: In XLSX export, display cents in the money columns
- Fix: PurchasableInterface::hasEcommerceAccess() can now accept null in the parameters
2.4.0-beta.3 (December 9, 2024)
- Enh: Add Invoice tags to the Transaction payment receipt template
- Fix: Error when saving a Physical or "Other" product
- Fix: Quantity field max units in the cart summary
2.4.0-beta.2 (December 9, 2024)
- Fix: Vendor admin edition
2.4.0-beta.1 (December 9, 2024)
- Enh: Add the possibility to create purchasable products from other modules (see DEVELOPER)
- Fix: Migration issues when disabling/enabling the module
2.3.2 (December 5, 2024)
- Fix: Issue with new subscriptions since 2.3.1
2.3.1 (December 4, 2024)
- Chg: Move the "Buy access to this platform" button from the language chooser to the bottom of the login form
- Enh: Add the "Buy access to this platform" button to the modal login form (only available for HumHub 1.17)
- Fix: For products with subscriptions AND free price, it is not possible to enter a price higher than the product base price
- Enh: Add 2 Module settings for the configuration file:
enableInvoiceStateField and enableInvoiceVatField (default value is true)
2.3.0 (December 2, 2024)
- Enh: Invoice numbers and date (previously the invoice was generated from the order reference and date) and versioning. New available tags for invoice templates:
{invoiceNumber}, {invoiceDate}. New settings in the module configuration.
2.2.3 (Nov 14, 2024)
- Fix: When editing a product for paid events, the product-related event is not saved.
2.2.2 (Nov 14, 2024)
- Fix: Allow discount codes for subscriptions
- Enh: Allow disabling the module on iOS mobile app (to avoid "In-App-Purchase" Apple requirement on iOS mobile app)
2.2.1 (Nov 5, 2024)
- Fix: For some languages, the Discount date validator can be wrong (e.g. with the French language)
- Fix: When creating a new product, the attached image is not saved (it works when editing an existing product)
- Fix: German translation of "Free price" is now "Betrag frei wählbar"
2.2.0 (Oct 21, 2024)
- Fix: Adding a new product when no vendor is selected in the filters of the Products page.
- Enh: Add GitHub HumHub PHP workflows (tests & CS fixer)
- Enh: In the order summary, add bold to the total due and remaining amounts
- Chg: In French translations, rename "Taxes" with "TVA"
- Chg: Rename "About your order" with "Billing and Ordering Information" in the "Payment of the order" page
- Enh: Add drop zone to upload product images
- Enh: When a user is disabled, it is possible to enable the account again by purchasing a "Platform access" or "Space access" product type
- Chg: Single use discounts cannot be used without being logged in
2.2.0-beta.1 (Sept 23, 2024)
- Enh: Add discount codes that customers can add to an order
- Fix #1: Filters in mobile view
- Enh: If the store is not open to visitors (who do not have an account), add a warning in the vendor settings, in the "Visitors access" section
- Enh: Use CSS variables to allow compatibility with Dark Mode (see #7134)
- Enh: Allow product free price and subscription together
- Fix: Webhook throwing an error for transaction refunds
- Chg: Minimum PHP version is now 8.1
- Enh: Update DomPDF library v2.0.4 => v2.0.8
- Enh: Update Stripe library v13.13.0 => v13.18.0
2.1.4 (June 18, 2024)
- Fix: Access to private content as a guest
- Enh: Add
Module::allowDirectUrlAccessToPrivateContent
- Cgh: Replace "Magasin" with "Boutique" for the French translation
2.1.3 (April 8, 2024)
- Fix: Sorting products by vendor or reference in store
2.1.2 (March 21, 2024)
- Enh: In the module settings, add the new option "When auto-renewal by recurring payment is available for subscriptions, do not allow manual renewals."
- Enh: If a public space, a group or a platform access can be purchased from several products, when clicking on the "Buy access" button, display all products allowing to by access to it
- Enh: Add the possibility to manually add an order for a subscription
- Fix: On checkout, display auto-renewal checkbox if only Stripe is available and Stripe subscription enabled
- Cgh: By default, when automatic renewal is available, check the option by default
- Fix: Remove error message when deleting an order about a subscription (no bug, only a useless error message)
- Cgh: When deleting an order, delete it immediately (no soft deletion) in order for the admin to see the consequences strait away (e.g, subscription removal)
2.1.1 (March 11, 2024)
- Enh: Change notification (web and email) text on subscription renewal
- Fix: In the administration subscriptions page, the checkbox filters displays the name twice and without wrapping
- Fix: Prevent from deleting products associated with subscriptions
- Enh: Added integrity check for subscriptions without product
- Enh: Added integrity check for orders or subscription associated to a soft deleted user
2.1.0 (March 8, 2024)
- Enh: If a user subscribes to a product containing all accesses to a subscription they already made previously (e.g. they subscribe for Space 1 and 2, but he already subscribed for Space 1), a warning is displayed and the previous subscription is automatically canceled
- Fix: The "Renew subscription" button is not displayed anymore if another active subscription includes its products
- Fix: If an access (e.g. to a Space) must be removed (subscription not renewed) and the user has another active subscription for the same access (e.g. the same Space), don't remove access to it
- Enh: In the store, when adding a product to the cart, if the product already has been subscribed and the user can renew it, display a "Renew this subscription" button instead of "Add to cart"
- Fix: Delete subscription in admin panel
- Enh: Updated Stripe API library from
v13.9.0 to v13.13.0
- Fix: German translations for the
Space word
- Enh: Add the language chooser to the store when displayed to a guest
- Fix: Send emails to guests in the language selected in the language chooser
- Enh: Once a product is added to the cart (any product), in the store, the Vendor filter is automatically selected to the vendor of the product(s) in the cart.
- Fix: In the module settings, "Open the product sheet in a modal window" was not saved
- Enh: Add a new option in the module settings: "Display the "Add to cart" button on product cards"
- Enh: When creating a new product, by default "Access removal delay after expiration (in days)" is set to
1
- Fix: Remove the link on the "Store" title if no categories are selected
2.0.3 (Feb 19, 2024)
- Fix: Remove the requirement to have the "Members can invite external users by email" checked to buy Space accesses as a guest
- Fix: On the payment form, add an email validator for guest emails
- Fix: When a user is deleted, the orders and subscriptions must be converted to a guest user
- Enh: Add
Module::deleteOrdersAndSubscriptionWithoutCustomer bool attribute allowing to choose, if a user is hard deleted, if the orders and subscriptions should be deleted or assigned to an "Unknown" guest
- Enh: On the admin page, add info about group permissions and if not allowed to add a vendor or manage guests
- Fix: On the admin page, don't show the "Visitors" button if the search model query returns no visitors
2.0.2 (Feb 9, 2024)
- Enh: Added a
$cacheDuration variable in the Module.php file. The Default value is 1 minute.
- Fix: Allow guests (non-registered users) to change the order quantity in the cart
- Fix: When changing the Quantity on the "Shopping cart" page, the "Number of purchased products" disappear
- Fix: When multiple items with taxes are ordered, if the amount of the item must be rounded because of the tax, the total of the order can be slightly different
2.0.1 (Feb 5, 2024)
- Fix: When a subscription is bought as a guest, after account creation, update the subscription to assign it to the newly created user
- Enh: Added integrity checks to remove orders and subscriptions whose owner is empty (there is no user or guest associated with this order)
- Enh: Added the new
requirements.php file (https://github.com/humhub/humhub/issues/6831)
- Fix: Order price update after adding an item (only for external modules using this eCommerce module)
- Fix: When purchasing multiple Spaces in the same product as a Guest, add the users to all these spaces when the account is created
- Fix: Deletion a subscription having multiple orders
2.0.0 (Jan 30, 2024)
IMPORTANT: To activate Stripe subscriptions, you need to:
- Enh: Added subscriptions (recurring payments), and auto-renewals (auto-payments) with Stripe
- Enh: Added the possibility to select multiple spaces in a product
- Enh: Added the
Can edit the settings of the vendor “Vendor Name" group permission (replaces the global Manage Settings permission)
- Chg: For products with access (Platform, Group, Space, Event or Private content), it is no longer possible to define the number of available units and the minimum or maximum number that can be ordered, because it is useless for access to virtual products and would not work for subscriptions.
- Enh: Added item and transaction buttons on order cards
- Fix: On the "Product added to your cart" page, don't show "MAXIMUM QUANTITY REACHED".
- Fix: Automatic access to platform, space or group
- Fix: Pagination at the bottom in orders and product lists
- Fix: Hide orders, products or transitions in pending deletion
- Enh: Use the new
LongRunningActiveJob for cron jobs (available since HumHub 1.15)
- Fix: Display profile menu items for admins
- Enh: Many other small improvements
- Chg: "Private message" is renamed to "Private content"
- Enh: Private content can now have a name
- Chg: Requires PHP 8.0 or later
- Fix: On checkout, if the address or legal form is not valid, don't show the next form
- Chg: Replace
public function getAccessRules() with protected function getAccessRules() (https://github.com/humhub/humhub-internal/issues/113)
- Fix: Stripe events
charge.refunded and charge.refund.updated
- Chg: Updated Stripe API library from v13.6.0 to v13.9.0
1.2.1 (December 19, 2023)
1.2.0 (December 18, 2023)
- Enh: In the module setting, add the possibility to choose the product sort order in the store
- Enh: If a product description has formatting, display to formatting on the product cards (and not only when viewing the product)
- Enh: Added the
{purchasedItemSummary} tag allowing to generate a table of the purchased items, with product names, prices, quantity and total price.
- Enh: Added the
{lineBreak} tag allowing to add a line break.
- Enh: Added the possibility to sell private messages for guests (they can buy it without having to create an account)
- Chg: On the order, replace the "View the message" button with a button containing the name of the product
- Chg: The minimal HumHub compatible version is 1.15
- Enh: Updated Stripe API library to version 13
- Fix: Stripe API test when keys not defined in the settings
- Fix: Compatibility with HumHub 1.16 (
canDelete(), canEdit() and canView())
1.1.5 (October 20, 2023)
- Fix: Exporting orders split by items and transactions crash
- Enh: Add events to OrderSearchSplitByItemsAndTransactions
- Chg: The configuration page is accessible from the module admin page only
- Fix: On HumHub 1.15, if "Allow visitors limited access to content without an account" is unticked, guests cannot buy products anymore
1.1.4 (September 21, 2023)
- Enh: Added the possibility to have some products with a free price (the customer will enter the price he wants to pay, with a minimum defined in the product price).
- Enh: Added the possibility to buy space access as a guest (without being logged in): an email invitation is sent
- Fix: "Add a transaction" and "Filter" button clickable with HumHub 1.15+
- Fix: Order visibility for guests
- Enh: Product images height
- Enh: When a guest buys access to the platform or a space, check if he's not already invited
- Chg: Product permalink (in the administration) now displays the product page with the purchase button
1.1.3 (August 31, 2023)
- Enh: Instructions to create the PayPal API key
- Enh: Possibility to add HTML code in invoices and receipts
- Enh: Integrity check optimizations
- Fix: PDF generator with PHP 8.2 (updated DomPDF library to version 2.0)
1.1.2 (July 25, 2023)
- Fix: If an exported value starts with the
= char, exporting in XLSX crashes
- Fix: If payment is not completed, allow choosing another payment method in the payment history
- Chg: Jobs don't retry anymore if error, but adds the error message to the logging
- Fix: After impersonating, it is not possible to check out before 1 minute
1.1.1 (June 25, 2023)
- Fix: Image gallery height
- Fix: Product administration
1.1 (June 22, 2023)
- Enh: Added PayPal payment method
1.0.9 (June 15, 2023)
- Fix: Removed ending
t and the end of "Bank transfer"
- Fix: Access to the shop when pretty URL (URL rewriting) is disabled
1.0.8 (June 2, 2023)
- Fix: Added compatibility with HumHub 1.15
- Fix: Bug with orders introduced with v1.0.7
1.0.7 (May 30, 2023)
- Fix: Compatibility with the new "Reactions" module
- Fix: Products and Orders count shown in admin if some of them have are on pending deletion (since HumHub 1.14)
- Fix: Cleanup jobs check if products or orders are not on pending deletion (since HumHub 1.14)
1.0.6 (May 27, 2023)
1.0.5 (May 7, 2023)
- Fix: Don't show products and orders pending deletion (for the new soft deletion of HumHub 1.14)
- Fix: German translation of "Store" is now "Shop"
1.0.4 (May 1, 2023)
- Fix: Hard delete records on disable module and on integrity check (for HumHub 1.14)
- Chg: Minimum HumHub version is now 1.14
1.0.3 (April 26, 2023)
- Fix: Products too small on Enterprise theme
- Enh: Added database integrity checks and repairs
- Fix: Warning with PHP 8.1
1.0.2 (March 29, 2023)
- Enh: Added the possibility to buy free products by bypassing the payment form (direct validation of the order after entering the required information on the checkout page).
1.0.1 (March 14, 2023)
- Enh: Small design refactor (breadcrumb, sidebar admin menu, etc.)
- Fix: Payment method labels caching
1.0 (February 11, 2023)