5.0-beta.3
5.0-beta.3 is the third beta round of WISECP 5.0: four new language packs including right-to-left Arabic, one-step price updates for domain extensions, sequential order numbers, Microsoft 365 sign-in for SMTP mail, ten new capabilities such as reseller discounts limited to chosen billing cycles and registrar modules managed from their own page, over fifty security improvements and hundreds of fixes.
Nuevas funciones
- Four new language packs, enabled by default: Ukrainian, Portuguese (Portugal), Greek and Arabic, the first right-to-left language, with the admin panel, themes, live chat, invoice page and PDF mirrored
- Standard SMTP can sign in to Microsoft 365 with OAuth 2.0
- Domain extensions: update selected prices in one step (percentage, cost plus margin or fixed amount) with a live preview, fill missing multi-year prices from the first year and limit a change to chosen currencies
- Sequential order numbers: new orders can use their order ID as the order number, invoices can start from a chosen number, and new installations start record numbers at random five-digit values
- Domain registrations the registry accepts but completes later are now tracked and activated automatically once the name is registered
- Virtualizor: a product can place new VPSes on an automatically chosen node (skipping locked, offline or full nodes), in a server group or on a specific node
- Add-ons can now carry their own auto-renew setting instead of always following the service
- The billing address can be made mandatory at sign-up, and a partly filled address is no longer saved with a 00000 postal code
- Deleting a server can now move its linked services to other servers in the same step
- Registrar modules: a module's page shows its status and enables or disables it by assigning or moving its extensions, and Extensions and Prices can be filtered by registrar
- Reseller discounts can be limited to selected billing cycles, for example to monthly purchases and renewals only; an Admin API update that omits the cycle list clears the limit
- WStyle theme: visitors can send a testimonial from the home page again (on by default, set per language); it appears on the site only after staff approval
- The Dynadot module can send your Dynadot coupon code with domain registrations, transfers and renewals
- Admin order creation: domain items can carry custom nameservers (panel and admin API)
- Automatic www can now also remove www, sending visitors to the address without it
- Default display mode setting for the WStyle and Basic themes (light, dark or auto)
- WStyle and Basic themes gained a Content Width setting that lets page content grow wider on large screens
- Theme templates can choose the plural form of a phrase from a count, on the server and again in the browser when the count changes
- Modules can attach their own action strip to a staff reply on the admin ticket page
- Admin API: a ticket reply can be posted as an acknowledgement (keep_status) and without the client e-mail (notify_client)
- For add-on developers: editing a service record from the panel or the Admin API now fires the action:service.updated hook with the changed fields
- Tickets: the status filter of the admin ticket list can combine several statuses at once, and the Admin API ticket list accepts several comma-separated statuses
- Domain extensions: an Import from Registrar button on the extension list opens the chosen registrar's extension and price import screen directly
- Modules can show a badge in the Related Service card header on the admin ticket page through the filter:admin.ticket_detail.service_badges hook, optionally linking to a tab of that service's page
- For add-on developers: a dedicated admin operation changes a service's scheduled dates (process exemption, suspension, cancellation) without touching any other field
- For add-on developers: a dedicated admin operation changes an invoice's due date alone, leaving its number, taxes and totals untouched
- For add-on developers: a dedicated admin operation renews a software service's license key and leaves its domain, IP and other license details untouched
Mejoras
- Support departments can require the client to choose the related service when opening a ticket
- Cash management shows the income, expense and net of all matching records, and its amount and date filters and staff search now work on large lists and in the API
- The payment gateway report shows total commission instead of the day count, with a commission column per gateway
- The order summary on the configure page lists product add-ons like the payment step does, names the cadence of add-ons billed on their own and gives one renewal line per cadence
- Requests opened as a guest now move to the customer account once the e-mail address is verified
- Switching to a developer license key now asks for confirmation first, and going back to a previous license key no longer needs a reissue
- Admin API cancellation requests now return the client's feedback and the reason key
- The admin API service tool endpoints now return module_init_failed (HTTP 500) with the reason when the service's module cannot be initialized, instead of saying the service does not expose tools
- Admin API: an add-on's pricing type (catalogue or custom) can now be read and set
- Bank Transfer: each account can carry a payment link, shown to the client as an Open Payment Link button, and payment instructions under the account details; values with quotes no longer break the settings form
- Sign-up, checkout and billing profile country lists offer only the countries the access rule allows, and checkout preselects the billing country like sign-up does (the only allowed country, otherwise the visitor's)
- Dynadot: the coupon setting takes several codes that are tried in order, and when Dynadot accepts none of them the registration, transfer or renewal goes ahead at the regular price instead of failing
- Virtualizor: the VNC console can reset the VNC password when it asks for one, and nodes without a location get a country flag from the VPS IP; a tool switched off for a server no longer shows customers a dead tile
- Product add-ons get the price generator: one monthly price fills every billing cycle without deleting existing options
- Theme settings can choose which product group the client area's Order a Service buttons open; if that group is closed, the buttons fall back to the first active group
- When a request fails in the admin panel, the error appears in the panel language and the server's own message is no longer replaced by "Network error"
- The Health page shows whether cron jobs have a hard runtime stop, and a job that runs past its limit without being stopped is logged
- The dashboard settings menu can now restore the default widget layout
- Admin smart search now finds support tickets by the client's IP address: the address a ticket was opened from and the addresses of client replies
- Create Invoice on the ticket detail now opens in a new tab, so the ticket and an unsent reply stay open
- Live chat: the bubble and staff replies take the secondary color, the bubble lines up with the back-to-top button, the lock badge reads well in dark mode and the button no longer covers the cookie notice on phones
- Notification e-mails now darken a brand color that is too light to read on their white background
- Interface polish: collapsible panels use the standard motion, the domain search panel opens smoothly, row menus open at the clicked row, order summaries are aligned, and more
- Bank Transfer settings and the support announcements window open their own guide
- Report a Bug appears as soon as the license is verified
- The passwordless sign-in button on the client login page now says what it does instead of showing only the JetPass name
- The file manager's invalid file name warning and the SSL DNS host hint now read as complete sentences in every language
- Checkout and invoice texts use a neutral tone
- Crontab setup card now says which user the CLI cron line belongs to
- Lexware Office: send-trigger options and bell notifications reworded
- WIPAM: Spanish, Italian and Brazilian Portuguese usage-alert notification templates ship with the module
- The admin API action log list returns a new description field: the sentence of each entry in the language of the request
- The domain transfer failure hook tells a registry refusal from an API error
- Client details: the Products/Services tab has a Create New Order button, and every create-order button now follows the order creation privilege
- Admin API: the client detail now returns the currency the account balance is held in (balance_currency_id), so a wallet funded in another currency is not read in the display currency
- Mercado Pago: the payment step and module settings are now available in Spanish and Brazilian Portuguese
- Settings that had no effect are removed: Pagination Length in Settings > Other > Limits (the admin API field stays, marked deprecated) and Override Client Currency in the domain settings
- Admin API: responses for the clientArea menu group carry a deprecation notice; the group is not shown by any theme, reads and writes keep working in API v1 and writes will be refused in API v2
- The Client Area logo tab now shows which icon the collapsed client panel menu uses and links to where it is set
- Admin sidebar: the logo sits on a soft brand-coloured glow, and in dark mode the sidebar is translucent with a blur and follows the page's own colour scale
- Updating keeps a cancellation request SMS text you edited in the panel: the English and Turkish templates this release ships for the first time no longer replace it
Seguridad
- Sign-in codes, password reset links and verification codes also went to a client's extra contacts and sub-users
- Hidden (staff-only) ticket replies could reach the customer through live chat, notification e-mails and the personal-data export
- A module action could run on another service's account when several services were handled in the same run
- OpenPanel: cancelling or unsuspending a service could reach another customer's account with a similar name
- Deleting a client from the client list could remove another client's service
- Admin API document delete could remove another client's documents; deleting a verification document left its record behind
- Virtualmin: the alias and subdomain tools could list, count and delete records belonging to other services on the same server; they now only reach this service's own records
- Special products: a customer could download the product file from the service page of an unpaid order; the product file and delivery note now open only for an active service
- Deleting a client, service, invoice or domain left personal records, documents, history, notifications and payments behind
- SSLCommerz: payment validation has been tightened
- Admin notification bell no longer stores reset links, access codes or decrypted service passwords
- Module logs now mask passwords and keys carried inside XML request bodies; the NetGSM password was stored in plain text
- Module and error logs could keep credentials sent as JSON text or as EPP password elements
- Realtime Register: the DNS records of a domain linked to a shared DNS template could be edited from WISECP, rewriting every other domain on that template
- DirectAdmin: changing an FTP account's password no longer widens the account's directory to the whole home directory
- Two-factor sign-in no longer locks out administrators, staff or clients when the mail or SMS module that delivers codes is missing, switched off, removed or reconfigured through the Admin API
- Access details of a pending service were shown to the client before delivery
- Activity log entries in the admin panel now show names and labels as plain text, so HTML carried by a record's data can no longer run in an administrator's browser
- SVG attachments opened from the admin panel are served sandboxed on every web server
- A route parameter in the address could open a different page than requested, including the admin login under a restricted admin path
- OpenLiteSpeed ignored the package .htaccess protections for backups, storage, customer uploads and composer files; every rule now has a rewrite form and the health check measures it
- Folder guards repair themselves: an empty .htaccess left by a full disk is rewritten, backup archives stay protected under resources/uploads, and blacklist screenshots are not stored in an unprotected folder
- The update brings an older installation's root .htaccess up to date: the Authorization header reaches PHP-FPM and every access rule gains the form OpenLiteSpeed reads
- The 3.x installation a V3 to V5 upgrade keeps beside the new one is closed to the web: the root .htaccess, the update and the nginx template refuse the backup folder, and Health lists it while it is reachable
- Backups: the backup folder's web-access guard is no longer deleted when its replacement cannot be written on a full disk
- Tickets: attachments were open to anyone with the address and now need an ownership check; email replies to a guest ticket are accepted only from its own address, and new references are much harder to guess
- PayTR, 2Checkout, Tripay, Shopier and Skrill: a wrong signature could reveal the valid one and some callbacks passed with an empty secret; both are refused now, and Skrill callbacks are bound to their own payment
- BitPay could mark an invoice paid from an unverified notification, and Garanti and Paywant did not check the confirmed amount; only the provider's confirmed status and amount settle now, and Paywant uses HTTPS
- Akbank Payten and İş Bankası skipped the signature check when the POS type was empty or unknown; İş Bankası, Kuveyt Türk, Finansbank, Akbank and 2Checkout could settle an invoice for less; such returns are refused now
- iPara, PosFix, Paystack and Payguru: a return not tied to its payment could settle another, larger or second invoice and is now refused; iPara and PosFix no longer show a successful non-3-D Secure payment as failed
- PayPal: a notification in another currency could settle an invoice and is now refused; a subscription invoice is paid only once PayPal confirms the first charge, and the Converting Currency setting now reaches PayPal
- Staff signed in to a client account from the admin panel can no longer change its email address, phone number, password, passkeys, two-factor authentication or API keys
- Notification templates can no longer call static class methods or read PHP constants or the request's session and cookie data, and saving a template checks it by compiling instead of running it
- The Admin API returned hidden message bodies, the spam protection key and captcha secrets; module and error logs kept credentials from form bodies, and completed domain transfers kept the auth code
- Simultaneous requests could open two accounts with one email, sell past the stock, write an affiliate commission twice or overwrite a withdrawal, and approve a service transfer twice; each now goes through once
- Translated theme phrases: validation of the values passed into them has been tightened
- Databases: choosing Custom privileges without ticking any no longer grants the user All Privileges
- Automation: the reminder run summary now escapes the admin name, so a name containing HTML no longer renders as markup in the job details
- Client custom field rows can be edited when the field name contains quotes, and the name can no longer run code in the edit dialog
- Without debug mode, an unexpected error in an AJAX request no longer shows the server's file path: visitors and clients get a general message with the error ID, staff get the message with the path made relative
- The Health page web access check now also measures a backup folder moved elsewhere and explains that the shipped server rules protect backups/ only
- Removing a user's two-factor authentication from the admin area or the API now ends their open sessions and forgets their trusted devices
- Password character rule now applies when an administrator sets a client's password
- Language text import and translation editing can no longer rewrite routes or the language package settings
- Security > Process Restriction: the limits you set for sign-in, password reset and email verification were not the ones enforced; they now are
- Support settings now need their own Support Settings privilege (also in the Admin API), and ticket editing opens ticket work only; the update grants it to groups that manage privileges, tick it for the others
- Sign-in: a shared failure counter could lock out every administrator and now counts per address and per account; unsigned sign-out links ask for confirmation, and social sign-in requests expire after ten minutes
- Web access: the bundled library version list is closed to the web, backup archives get unguessable names that the nginx template refuses, and Health Status also checks dot-files and .md documents
- Bundled libraries moved past published advisories: phpseclib 3.0.57 (the update brings it too and leaves a hand-changed library folder alone), PrismJS 1.30.0 and jsPDF 3.0.4; unused jsPDF 1.x files are removed
- License: scheduled tasks now stop when the license is refused for good (cancelled, expired) and resume once verified; a fast clock no longer expires it, unsigned answers are refused and the API check cannot be bypassed
- Knowledge base: search terms match literally, limited to 2-120 characters and 50 searches a minute per address (Security > Process Restriction); a visitor without cookie consent can vote once per article per hour
- SMS text can no longer break the Netgsm, İletiMerkezi and Interaktif requests, admin toasts keep only safe HTML, CSV export also neutralizes formulas starting with a minus, and ip-api pro and CurrencyLayer use HTTPS
- Encrypted connections: the disposable email check uses HTTPS, new FTP backup destinations use FTPS by default and say plainly when a server lacks it, and the server templates carry an optional HSTS line
- Deprecated modules can no longer be switched on: Payguru, RavePay and Öztek SMS are deprecated and keep working only where they are already enabled; once switched off they cannot be enabled again
Correcciones de errores
- Fixes delivered by the 5.0-beta.2 fix package that 5.0-beta.3 did not include yet are now part of this release: updating a patched 5.0-beta.2 site no longer undoes them
- With tax-inclusive pricing, orders created from the admin area or the admin API charged VAT twice once the invoice was recalculated
- Paying an invoice from account balance can no longer charge twice
- A second successful payment for an already-paid order is no longer lost without a trace
- Subscriptions: cancelling a service or add-on now stops its automatic payments, repeated gateway notices no longer renew twice, and charges are recorded, larger ones crediting the excess to the balance
- Domain renewals sent the original registration term to the registrar instead of the years paid
- Refunding or cancelling an invoice with "Cancel Services" missed services created by the same order and left the cancelled services' unpaid renewals payable
- Domain extensions priced in more than one currency showed a converted website price that differed from the invoiced amount; every price reader now picks the same row
- Domain add-ons (DNS management, ID protection, forwarding) could be invoiced at a different price than the website quoted; the order engine and the admin order preview now pick the add-on price with the website's rule
- Quantity add-ons with several variants are billed for the variant the client picked
- Turning taxation off now stops tax on the cart, new orders and renewal invoices
- Saving a setting no longer wipes a configuration file that failed to load
- Saving the details of a domain whose transfer was pending erased its stored transfer (EPP) code, and every save recorded untouched dates as changed and reset their seconds
- The installer treated a WISECP 3.x database as an existing V5 install: it skipped the schema, changed 3.x records and left the site down. It now stops at the database step with an explanation
- Upgrades from 3.x: migrated clients get notifications again, and module definitions, custom renewal prices, scheduled jobs, add-ons, admin privileges, .html addresses and the PHP version are kept or repaired
- A notification that fails no longer fails the invoice, ticket or order that triggered it
- Clients using SMS two-factor authentication could not sign in, and sign-in codes were sent on both SMS and email
- Accounts without a password were told JetPass, SSO, social sign-in and Sign In as Client had worked, then landed on the sign-in page
- Changing the domain profit margin could write zero or unconverted prices, and repeatedly raised prices that have no known cost
- An invoice could be issued with a number another invoice already had
- Cancelling an order voids its invoice and restoring it reopens the invoice
- Backups no longer hang or end with a truncated archive: hung steps stop, a failed mysqldump falls back to the PHP exporter (faster on large tables, with routines and triggers), large files and full disks are handled
- Restores no longer stop at the first duplicate row or get ended while still running, refuse a cut dump before writing, keep imported schedules from re-running, pause other jobs and backups while importing
- Actions that notify staff (manual invoice, support ticket, service transfer, password reset) no longer fail when the notification template has no department selected
- Payguru, Shopier and 2Checkout: saving the payment settings no longer overwrites the Service ID, API Secret or Private Key with another field's value
- Reseller discounts now apply on renewal and upgrade invoices, to resellers without tiers of their own, and at every tier level the reseller forms offer
- Importing from WHMCS stopped at the first service, domain or add-on that had a payment subscription, and add-on subscriptions were linked to the wrong record
- Auto-payment no longer charges the default card for an invoice that only carries the account-wide balance setting
- Hosts that disable set_time_limit, ini_set or ignore_user_abort no longer hit a fatal error in the cron tick, imports and payment callbacks
- Keep Current Prices no longer freezes a first-term or stored amount as the permanent renewal price
- The price change dialog and Keep Current Prices no longer count or lock unrelated domain services, which then missed later extension price changes
- Paraşüt: when the e-Invoice registration lookup failed, the invoice was issued as an e-Archive even to registered e-Invoice taxpayers
- Paraşüt: an invalid company tax number no longer silently falls back to the contact person's T.C. ID; the invoice is not formalized and the admin is notified
- Fractional tax rates (such as 25.5% or 8.1%) are no longer cut to whole numbers; the EU VAT table is updated for Estonia, Finland, Romania and Slovakia
- Checkout for a client without a saved billing address: details are pre-filled and tax follows the country in the form or account, on the website and through the Client API
- SSLCommerz: saving the settings no longer replaces the Store Password with the Store ID, the Pay button works on the invoice, checkout and Add Funds pages, and a payment closes as soon as the customer returns
- Admin API: an add-on attached without a cycle or end date now renews like one added from the panel
- Payeer: payment notifications are no longer rejected as coming from an untrusted address when the site runs behind Cloudflare or another trusted proxy, so paid invoices are marked paid
- Services: changing a service's price now updates its open renewal invoice
- Price generator: the daily cycle now generates a price, hourly and weekly prices follow the storefront's month equivalents, and a selection that yields no rows no longer clears the pricing table
- GDPR requests can no longer be approved without choosing what to remove; anonymization can no longer delete the whole account
- Deleting a client now respects an add-on that protects the account: nothing is deleted and the reason is shown
- Mail-to-ticket queue no longer counts an unqueued mail as a duplicate or deletes its file
- The account-deletion day fields under Automation > Other Settings now show the saved value, and saving 0 turns the task off
- A fix package no longer breaks an installation that removed the Paraşüt, WDNS or WIPAM addon
- Admin actions and license verification kept failing with “SaaS API connection failed: generic HTTP 401” after the server clock was corrected
- İleti Merkezi and Yapı Kredi POSNET replies are read correctly: sent SMS were reported as failed and the POSNET 3D Secure form was printed with empty fields
- Retrying failed module queue items (Retry All Failed, the API retry) and items recovered after a timeout now run again: the automation matched them to the finished job of their earlier run and never started a new one
- Panels opened under a www. prefix asked the update feed with a host that did not match their license lock
- Domain search stopped working when an extension was assigned to a registrar module that is not installed
- The Updates page no longer fails when PHP's memory limit is written in bytes or phpinfo is disabled
- Domain registrations and transfers stuck in processing, and could be sent twice, when a registrar module returned a label like SUCCESS; the label now counts as success or failure and transfers keep the registrar's IDs
- License lock screen: the key field opens on installations without a key, and saving the same key or one replaced on WISECP's side no longer locks the panel or needs a reissue
- Client groups: the Protection and Priority switches were saved but had no effect; automation no longer suspends or cancels a protected group's services, and a priority group's tickets lead the staff queue
- WHOIS privacy: the Enable button works, the service page and overview badge show the real state, and free or paid privacy is recorded and switched on once
- DNS record editing no longer changes the TTL or priority silently, resets fields the API did not send, shows the wrong type or strips @, underscores and wildcards from names
- Saving the add-on detail window no longer rewrites dates, quantities and settings you did not change
- Domain orders now apply the default nameservers set by the administrator; the shipped example values are not sent
- Client group discounts apply again when "Combine with other discounts" is off; that setting now only stops the group rate stacking with a reseller discount
- Admin API service management update no longer resets the limits left out of a partial limits object
- Coupons limited to one product per order now discount only one item
- Premium domain pricing switch now takes effect: when it is off, premium names use the general profit margin
- SolusVM 2: traffic limits defined in TiB were read as GB, so a 2 TiB plan showed a 2 GB limit and an extra-traffic add-on shrank the cap
- ServerAvatar: suspending an already suspended account no longer locks it after unsuspension, and the panel password no longer changes silently
- iPara and PosFix: a non-TRY invoice was charged as the same number in Turkish lira (12 USD as 12 TRY) and marked as paid; it is now converted to TRY when Converting Currency is TRY, otherwise refused
- Payment method commission was charged on the whole invoice; it now leaves out the part already paid by another method and the account balance applied to the payment
- Partial payments: bulk payments spread the account balance over all invoices, not just the first; no invoice is marked paid beyond what was collected; a partly confirmed pending payment returns the invoice to Unpaid
- With Order/Invoice Creation on, each change of payment method or balance at checkout opened another order and invoice and sent another confirmation; the same order and invoice are now repriced and the coupon is kept
- Products with a 3.x "12 Month" price row: the order page, cart, invoice and admin screens now use the same price row; a monthly term could be shown at one price and billed the yearly amount
- PayPal and Stripe Checkout subscriptions: payments are saved with their transaction ID (refunds work, no double recording), PayPal renewals in local time, Stripe zero-decimal amounts (JPY, KRW) in full, not a hundredth
- QNB Finansbank, Akbank, Akbank Payten, İş Bankası, Yapı Kredi, Ziraat and Kuveyt Türk virtual POS, iPara, PosFix and Authorize.Net: valid cards could be declined because the expiry date was sent in the wrong format
- ConnectReseller: domain registrations and transfers failed with "Invalid Client Id"; each order is now placed under the client's own ConnectReseller customer, which is created when missing
- Saving settings on a full disk emptied the settings files and broke the settings page and the seller details on invoices; the old file is now kept and the save reports an error instead of success
- Invoice editing: saving no longer erases the number, currency, tax settings or formalized and tax-exempt status left out of the form, and a changed client address now updates the invoice, Paraşüt and the history
- Reseller program: switching it off and saving wiped its conditions and discount rates, and cycle-limited discounts matched terms wrongly; 12 months now counts as Annually, 4- to 10-year domain terms no longer do
- Domain status check cancelled live domains on a temporary registrar error or a single "transferred" answer; the answer must now repeat 12 hours later, and a METUnic error no longer resends a registration order
- A domain could be ordered and charged twice when two registration or transfer runs reached the registrar at the same time; the second run now waits for the first and uses its result
- Notification e-mails: the SMTP mail module broke the design of every message (buttons, colours, fonts), and a notification whose template could not be rendered was sent with raw template tags
- Domains transferred in: after a renewal, the transfer check wrote the old expiry date back over the renewed due date and sent the client a second "transfer completed" e-mail
- Bulk notifications also reached contacts who had only general notifications on; they now go only to account holders, sub-accounts and billing contacts who accept marketing notifications
- Services: a save sending only some fields (panel, addon or admin API) erased the rest; name, notes, product, dates, discount and billing settings, access details and the license domain and IP are now kept
- SSL certificates: a renewal for a service with no CSR, domain or certificate product counted as successful without an order at the provider, so the certificate expired; it now fails visibly with a note on the service
- Built-in product groups (Hosting, Server, Software, SMS) could not save settings while a category had the same id (Hosting on every new install) and shared its icon; empty language titles no longer reset page addresses
- cPanel: on accounts without the MultiPHP feature, such as servers using CloudLinux PHP Selector, the service management page failed and the client was told the control panel could not be reached; it now opens
- License lock screen: after the license key was changed or removed, the old key's rejection reason stayed on screen and the new key was not checked for up to 24 hours; the panel now verifies the new key itself
- Updates no longer overwrite an installed language's company details and language settings with package defaults; the company name, address, texts and language switches you set are kept and only missing keys are added
- Automation: if a worker process could not be started, every cron run stopped with "MySQL server has gone away" and no job ran; a panel and database timezone difference no longer drops parallel workers to one process
- Updates: files are checked for write access before the database is touched, an update whose configuration step broke the site is rolled back, and a missing PHP CLI path no longer stops file copying
- Spam protection: with Project Honey Pot on, forms no longer fail for IPv6 visitors or on an unusable key; blocked records no longer show the sender as recipient and give reasons in the panel language; clearer help text
- Reports counted invoices paid from account credit as income a second time
- Signing in did not switch the visitor to the account's own currency, so an order could be invoiced in the currency browsed as a guest
- Server groups: the Lowest Load and Fill Up distribution types were applied the other way round when a new service picked its server; each group now places services as its selected type says
- A new-invoice notice, reminder or overdue notice that fails is no longer lost: the job shows as failed and its retry sends it once
- A client with services could not be deleted from the client page
- The Auto-Update switch for domain prices turned itself off and locked the profit margin
- Invoices created as Paid from the admin order form, the admin API or an admin-added service add-on were saved without a payment date
- Invoices created already paid were missing from the Income & Expense ledger
- Notifications that did not go out (password reset, invoice notices and reminders, client notices, template tests, sub-account invites, subscription and domain notices) are no longer reported as sent
- Actions no longer report success when nothing changed: bulk order and add-on updates, saved cards, root password resets, game server backups, SonicPanel, manual automation runs, license reissue, module settings and more
- Updates and the upgrade wizard wait for a running backup or restore instead of failing, reuse their own pre-update backup, name what they wait for and explain why jobs wait when cron runs over HTTP
- Remote backup destinations (Google Drive, OneDrive, Yandex Disk, Bunny) report a delete they could not complete, and the backup is kept until its remote copy is gone
- The price note on the order configuration page follows the tax setting: including tax, excluding tax or no tax
- The admin API list of a service's add-ons returned every add-on with no payment method, subscription, option or invoice
- The admin API service detail did not return the payment method or the subscription that the same API lets you set
- Category-scoped coupons never reduced the price of a matching product, and a parent category's coupon now covers its sub-categories
- Bank transfer notices never alerted staff with the Invoice Pending Confirmation notification
- Guest checkout sent incomplete customer details to some payment gateways
- Bank transfer is offered only when an account exists (falling back to another language's accounts); the order page collects the transfer notice and no longer asks for a transfer on pending, cancelled or refunded payments
- Some service and domain notifications mislabeled creation dates, and order cancellation emails promised refunds unconditionally
- Auto-renewals search no longer fails
- Enabling a service's auto-pay from the admin API requires a usable payment source and is logged to the client
- Auto-payment source is defined the same way for clients and staff
- The customer receives the payment confirmation e-mail when an invoice is paid automatically from a stored card or balance
- Viewing an invoice no longer sends the client to a forwarding payment gateway before a pay click
- Numbers, percentages and amounts follow each language's format, zero-decimal and some rare currencies print correctly, and amounts recalculated in the browser match the server
- Invoice emails and SMS did not show discounts, so the subtotal and tax did not add up to the total
- Partly paid invoices now show the remaining amount in invoice lists, summary cards and the client dashboard
- A payment provider's return to a shared invoice link no longer ends on a 404 page
- 2Checkout: a customer returning from a successful payment no longer lands on the failed payment page
- Payment modules (iyzico, Kuveyt Türk, Duitku, Payssion, Tripay, PayU and others) no longer leave the payment screen or the provider's notification hanging when the provider cannot be reached
- Affiliate commissions are shown in the partner's wallet currency, not the referred service's currency
- Invoice PDFs are now written in the client's language, whoever generates them
- Bulk deleting service referrals works again and a completed commission leaves the partner balance safely
- Extensions can add a QR code or another image block to invoice documents again
- Individual sign-up no longer asks for the company tax number and tax office
- Invoice preview and PDF now show the district and province for invoices issued before the upgrade
- The affiliate page now honours the visitor and commission rate visibility settings
- The Basic theme's homepage trust strip no longer promises on the company's behalf (30-day refund, 99.9% uptime, cancel anytime); its badges read Secure Checkout, Instant Activation and Transparent Renewal Pricing
- On the payment step, one-time and hourly add-ons of a product with a prorated first term showed only a fraction of their price and no cadence, so the lines did not add up to the subtotal
- METUnic: registrations outside .tr, availability checks, domain import, .tr transfers, renewals, nameservers and contacts follow the METUnic API, and refusals show the reason
- Admin order creation: the summary shows the invoice's amounts (rounding, tax, prorated overrides, add-ons, domain coupons), and changing a domain's period keeps its EPP code, price and add-ons
- Invoices: discounts the staff enter on invoice lines and carried-over campaign discounts now appear as their own rows on the client invoice page, the PDF, invoice emails and the client API
- Products: the Disable Renewal setting was saved but the client still saw the Renew button; it now hides manual renewal in the client area and the client API refuses it
- Analytics: the payment gateway report left installment surcharges out of the payment commission
- Reseller discount rates could not be saved when a tier had an empty upper limit or a two-decimal rate
- Advanced settings could not be saved if a client, order, service or ticket was created while the page was open
- Apply on module works when an order is deleted
- Deleting a service skips the module for an account that was never set up, and a module refusal shows its message
- Bulk ticket delete or close, and deleting a client, did not fire the ticket deleted and status changed hooks
- Scheduled downgrade email in the Ledger design now warns that the service will be reinstalled and unsaved data may be lost
- WDNS: signing a Cloudflare zone now shows its DS record right away, and the record is no longer garbled or lost when the zone is saved
- Duplicate Account Detection counted staff sign-ins as evidence, so every account an administrator had logged into as the client showed up as a duplicate of all the others
- Creating an order failed with an error when a product add-on referenced its requirements in an invalid form
- Send Activation Message on the service page reported success but never sent the activation email
- Extra recipients written one per line on a notification template (as the field hint asks) were joined into one broken address, so the staff copy never reached them; line breaks and commas are now both accepted
- Creating an order from the admin panel failed with an invalid file type error when an optional file requirement was left empty
- Products of a special product group could not be ordered through the client API, although the website sells them
- The reseller discount form never offered the SSL certificates group
- On a site without HTTPS, signing in failed with a misleading invalid-token error; setup now warns about it and the sign-in page states the cause
- A module action failing with an engine error is now saved on its queue item with the reason and retried instead of sitting in Processing until a timeout; add-on changes hitting it show the reason, not an error page
- An API request that failed before reaching the API kernel was answered with HTTP 200
- Settings pages of older third-party modules stopped with a system error
- Five registrar modules crashed instead of reporting an error when the provider returned an empty or unreadable response
- Registrar 'Import Extensions' table: extensions already defined (assigned to this or another registrar) could not be selected; they are selectable again and a Registrar column shows the current assignment
- Captcha and bot protection now work with several code images on one page, JetPass sign-in, domain search Add to Cart and ticket or blog comment forms, and a solved challenge resets the counter
- Site codes such as a live chat could not be given a cookie consent category, so the chat stayed hidden until the visitor accepted marketing cookies
- Signing in with Google or another provider on the checkout page no longer fails for new customers: an account is created and the order continues
- Lists that could not be read (DNS and DNSSEC records, child nameservers, forwarding, DirectAdmin backups, PHP settings, mailcow DKIM) show the error instead of an empty list
- A fatal out-of-memory error no longer skips the error log and leaves a cron job stuck as processing
- Domain registrations with an incomplete contact are stopped before the registrar and say what is missing; contacts of a domain not yet registered can be edited in the admin panel and API
- File manager editor no longer discards edits silently after a failed save
- Game server allocation notes can be saved again, and client-area tool actions that send a record ID no longer fail
- The product's Client-To-Client Service Transfer switch and limit had no effect on customers
- A third-party module whose class sits one namespace deeper no longer crashes its settings page
- Turning off Panel Login in the server's Quick Access preferences now disables the customer's one-click control panel sign-in everywhere
- Checkout errors stayed hidden after the billing country was changed or after signing in on the page
- The Updates page now warns about a mandatory release that the security patches switch cannot install because it is on another release channel
- Cron self-test reported a healthy system while the scheduler could not queue a task
- A recurring expense that could not be booked left no trace in Automation
- Import wizard: clean mode no longer fails with a duplicate-key error when an earlier transfer record is kept, and choices made while counting are kept
- NetGSM: sign-in and phone verification codes go through the OTP route when it is enabled, and accepted OTP messages are no longer reported as failed
- Basic theme: on narrow screens the client area's "..." menu opened under the page, so the links moved into it could not be reached
- Server modules: usage and limits that cannot be read show as Unknown instead of 0, Active or Unlimited, and a limit of 0 means no allowance (Virtualizor, Virtualmin, ISPmanager, ZesleCP, SolusVM 2, ServerAvatar)
- Updating WISECP or the live support (WChat) module no longer resets the chat window texts you entered in the panel (title, subtitle, welcome and required information texts, paid support title, text and link)
- AI Assistant: a failed automatic ticket reply is now tried again for the same customer message
- The tax number of Turkish corporate accounts was saved without any format check
- Admin API: the sign-in and action logs answered type=staff with an empty list and an unknown type with the wrong audience
- Notification emails: domain and invoice templates print the right dates, numbers and labels, and dates follow the recipient's language
- Updating a menu item through the admin API with only some language fields erased the fields that were left out (mega menu, badge, description, link)
- Setup wizard showed a blank error page when the configuration folder was not writable
- Scheduled suspension, cancellation and exemption dates that are not real calendar days are refused instead of being saved as another day
- Menu management: an item edited again without reloading the page lost its mega menu content, description and badge icon, and unsaved new items were saved onto each other
- A reseller's own tiers for a target now replace that target's program-wide tiers as a whole instead of being merged with them row by row
- Logging in to a reseller cPanel service opened the reseller's cPanel instead of WHM
- Order Starting # changed service IDs instead of order IDs
- Contacts read from LogicBoxes-family registrars now carry the first and last name, so the contact forms open filled and saving no longer sends an empty name
- Client affiliate tab showed the wrong referral link and referral count
- Editing an MX record's priority on cPanel now identifies the record by its current priority instead of the new one
- AI Assistant no longer drops a dataset entry whose embedding is missing
- Theme and product update checks no longer treat a missing answer as up to date, and the add-on list now shows waiting updates
- Core updates now replace the site entry file (index.php) instead of skipping it and logging "Protected file left untouched" each time; takes effect from the next update on
- Hosting service details never showed nameservers; the Service Information card also moved the status badge to its header and password change onto the password field
- API: retrying a request with the same Idempotency-Key after a server error no longer runs it a second time
- When a service's module cannot be initialized, the Management tab's error box is now shown in the panel language, and neither that error nor a failed automation job's log reveals the server's absolute file path
- Realtime Register: expired domains, queued registrations, finished or refused transfers and empty API replies are handled correctly, and domain import pages through the whole portfolio
- Admin API: module and registrar refusals (suspend, unsuspend, cancel, reinstall, password change, add-ons, domain endpoints) now answer 422 with the provider's reason instead of a 500 error
- OpenPanel: email usage, plan limits, single sign-on, cancellation, the account list, new account domains, error messages and password changes on suspended accounts now work as documented
- Document verification filters: the age Between option now checks a real range instead of acting as Greater
- Namecheap: MX records added from the panel now take effect instead of being ignored by the registrar
- Theme upload: a small theme package is no longer refused because the server upload limit is under 20 MB; the size error now appears only when the file really exceeds the limit
- Looking up a theme phrase through the shared language helper returns the active theme's text instead of a fatal error
- Services left in an invalid status by an older release (such as 'SUCCESS' written by a registrar module) are repaired on update and can be corrected from the panel
- Setup wizard reported URL rewriting as unavailable on CGI and FastCGI hosts
- The re-check button on the upgrade wizard check step only reloaded the page, so a requirement fixed after the first check (such as a newer PHP version) kept showing the old result; the button now runs the check again
- A suspension date set on a service now suspends it on that date
- Add-ons of a service with an exemption date are no longer suspended for being overdue
- The transfer (EPP) code of a domain whose incoming transfer is still in progress can be updated from the client area and the client API again
- Orders created with notifications turned off no longer email the approval
- The registrar extension import list shows costs for modules that return per-year pricing
- Very long ticket messages stayed invisible in the admin conversation history, leaving a blank gap
- The notification template editor no longer offers the header and footer for editing: changes there were silently discarded on save, now they are shown locked with a link to Shell & Preview
- Replying to an unclaimed ticket said it was held by another staff member (admin panel and Admin API)
- Minute-level cron tasks ran every two minutes on most ticks (hourly tasks every 61 minutes)
- Notification templates saved without a department, or carried over from 3.x, could keep an invalid department that the API showed as department 0; templates now keep a clean list and the update repairs older ones
- Settings API accepted a list where a single value was expected
- The admin API module settings endpoint returned two JSON documents in one response
- In-app notifications are written even when no mail or SMS module is configured
- Add-on module steps now wait for their service's module step
- Live chat rejected short messages such as "ok" or "yes"
- A client's language preference is now accepted only for an installed, active language (client API, admin API and the admin panel form); the admin API used to store any value
- A domain transfer refused at the registry closes the request, notifies staff and stops the hourly check
- Domain orders activated from the admin panel or API now track the transfer
- send_notification=0 on order creation mutes only the creation notice
- Installations set up from the first beta package carried prefilled company name and address details in every language; the update now clears these shipped placeholders
- A notice sent by hand, or a two-factor code, also landed in the client's and staff bells
- Emoji and other 4-byte characters were stored as a question mark when the database collation setting did not match the utf8mb4 charset
- The 3.x to 5 upgrade check blamed the encryption keys when only some stored passwords were kept in an older format
- Domain registrations and contact updates were refused by the registrar when the contact details were written in a non-Latin script
- Domain documents: decimal size limits are no longer multiplied tenfold, the form no longer calls optional documents required, new rows can change type again and errors follow the panel language
- Server module tool actions now validate the optional fields they receive, including minimum size limits
- The affiliate fraud check showed "no issues" even when a referred client shared the partner's IP
- Domain contact changes are no longer refused by the registrar: the phone number is sent with its country code split out
- Hidden and disabled product groups no longer appear among the homepage group cards
- Domain lookups treat extensions saved without a registrar like those set to None
- A half-filled language folder left by an earlier fix package kept the update from installing that language; it is now completed
- Knowledge base and software store links no longer land on the home page or a 404 in untranslated languages, and the language switcher lists only languages with a page
- A language you switched off is no longer served to visitors who had picked it earlier
- Article and reference category addresses now open the list filtered to that category
- The license file on a key-licensed product's Licensing tab now sends the customer's license key, so copies built from it can verify
- Setup wizard no longer turns on SEO friendly URLs on hosts that redirect unknown addresses to the home page
- Aurora staff ticket emails show the real reply and closing dates, and a ticket closed by the client notifies staff again
- Document verification filters now match an email provider list
- Affiliate promotional content now appears on the partner's program page
- The international SMS page no longer promises billing only for delivered messages
- Members created from the admin panel can see and verify their phone number on the Verification screen
- The product form now saves when a metric's upper limit is left at 0
- NameSilo refused a contact whose phone belongs to another country than its address
- Admin smart search no longer matches unrelated tickets for IP addresses, e-mail addresses and domain names, and finds every ticket that contains a .com address
- An add-on option that services still use can no longer be removed or moved to another billing cycle by a request that bypasses the form
- The add-on edit form now keeps the linked product selected, so saving no longer drops the link
- Renaming a child nameserver through the admin API without its old IP left the stored list outdated
- Domain lookups now work for 13 more .tr extensions (web.tr, bel.tr, info.tr, av.tr, dr.tr and others) when no registrar module is assigned
- A first term free add-on is now added to panel and API orders too
- Prefilled company details from the first beta package are cleared only when all company fields of a language still match the shipped sample, so a real company name is kept
- Admin API: the module settings endpoint reported the active SMS module as inactive; it now reads the status the same way as the module list
- SEO: the "Indexable" switch on pages, categories, products and the domain page now adds a noindex tag and removes the address from the sitemap
- Clients: "Unsuspend all services" no longer reactivates a service that was cancelled after the bulk suspension
- Contract pages: the 'During purchase' approval box now shows its own saved value, so saving the form no longer flips the purchase approval setting
- SSL dashboards: customers can resend the validation email again, and file validation instructions show for HTTPS validation too
- ISPmanager: the self-signed option of the SSL form can be used again
- General settings: the "Activate Cart for Guests" switch shows its own setting, so saving other options no longer changes guest checkout access
- Clients: the phone and landline duplicate rules now apply on sign-up, in the client area, in the admin panel and through both APIs
- Hetzner Cloud: creating a backup or snapshot no longer reports it as finished while it is still being created
- Themes page: a theme in development or with an incomplete package is no longer shown as ready to activate, and the upload progress names the real step
- Automation settings: every save removed the usage retention setting from the scheduler configuration file
- Admin API: the service detail now returns the scheduled suspension, cancellation and exemption dates
- Homepage layout and extension lists are saved and shown correctly for every installed language, and updates no longer leave a partial layout
- Updating no longer replaces the home page SEO title, description and keywords you set for a language
- International SMS no longer marks a batch as delivered at 100% the moment the provider accepts it; it shows Pending until the delivery report says otherwise
- .ng domain WHOIS lookups now work, and RDAP records are shown as readable WHOIS text
- Custom nameservers typed in capital letters were rejected on the Turkish storefront, and invalid characters were silently dropped
- SMS modules of Turkish providers no longer cut a foreign phone number down to 10 digits
- Mail alias form accepts a blank address for a catch-all, as its help text says
- Remote database access accepts hostnames and multi-part wildcard ranges, as its form says
- The client API rejected valid nameserver hostnames containing a capital I on Turkish-language requests
- Notification template API: a list or object sent for recipients, switches, departments or template text was saved as the word "Array"; it is now rejected with 422 and nothing is written
- Products: the SEO title and description of the software and international SMS groups now reach the storefront, and the settings page shows the values the site actually serves
- Themes page: opening the details of a theme that is no longer in the list no longer stops the page script, and theme names are sorted in the panel language
- DirectAdmin: clearing the mailbox quota now makes it unlimited, as the edit form says
- Dashboard, analytics and cash book figures count each instalment on the day it is received and only the gateway-paid part of a partly credit-paid invoice; deleting a payment via the admin API now reopens the invoice
- Order configuration page: add-ons defined as a product offer the linked product's terms and prices and reach the order; required add-ons show no locked switch or header price, non-monthly products no per-month line
- Storefront: periods priced at 0.00 are offered as Free on plan cards, the configure page and checkout, and prices keep their currency symbol, grouping and decimals on page layouts carried over from 5.0-beta.2
- Orders: approval also moves module services to In Progress; approve, activate, suspend and cancel windows say what really happens; windows and add-on counts use the right plural; order errors no longer ask for a product
- Coupons: an auto-apply coupon no longer adds a product to every cart or duplicates the client's line; new and existing client conditions are described as checked; delete windows and usage counts use the right plural
- Reseller program: with API Service on, active resellers can use the Client API even if it is closed to others; the program page shows API access only then and no longer promises automatic activation or credit terms
- Domain orders: a searched domain with nothing to configure goes to the cart ready for checkout, the Web Hosting Form switch now really hides the hosting offer, and the cart no longer shows Configure as done too early
- Automation: cancellation messages match the action; the task list switch and admin API keep service cancellation on while invoice cancellation is active; cleanup, low balance and fee sync texts are corrected
- Client area: on MySQL, the service page raised a database error (3141) in the renewal coupon check when the service's invoices carried an empty discount record
- Admin API: changing a group's payment modules switched card storage off when card_storage_module was left out, stopping stored-card auto-payment; the current choice is now kept
- Premium domains: the markup tier was chosen from the price in the visitor's currency, so the same name could get a higher margin in another currency; tiers are now matched in the default currency
- Email piping: a client's e-mail answer to a ticket opened from a website message or live chat started a new ticket; an incoming e-mail that does not become a ticket now shows in Automation with the reason
- With Staff Ticket Restriction on, full administrators saw only their assigned tickets, so unassigned tickets disappeared from the ticket list, the next-ticket shortcut and the admin API
- Open tickets were left out of the Needs Reply counters on the dashboard and the ticket list and missing from the Open Tickets widget; the counter card now filters the list to Open and Needs Reply tickets together
- Domain search: one extension Namecheap does not sell marked every extension as unchecked, and Netim showed every extension as taken and premium names at the standard price; each name now gets its own result
- Domain services: Dynadot transfers sent the authorization code under the wrong name and their status check failed with a date error, and the Service Provider list showed every registrar instead of the active ones
- Ticket replies: variables such as {FULL_NAME} in a staff signature are now replaced, predefined replies look in the editor as they will be sent, and the admin API returns the access details clients attach
- Notification e-mails: contact form and testimonial notices reached staff with empty fields and an empty greeting; dates now always use the installation's format and an empty date no longer prints as "19 May 1881"
- Domain import: the OpenProvider, GoDaddy, Dynadot, OpenSRS, InternetX and RegisterBe lists stopped at the registrar's page size and now page through the whole portfolio; imported domains carry an Imported badge
- SMS: with no international SMS module set, messages to numbers abroad filled the notification queue with "SMS send failed"; they are no longer queued, and waiting ones are cancelled with the reason
- Tickets: creating a ticket for a client in the admin panel showed an error before the success message, and a client's refused attachment was dropped silently; upload errors now give the reason in the panel language
- Downloading a backup froze the admin panel until the transfer ended, and the browser filled the backup list search with the administrator's e-mail address
- Hetzner Cloud and OVHcloud: when the snapshot list could not be read, a new snapshot was still created and the purchased snapshot allowance could be exceeded; creation now stops with an error
- Server modules: unreadable usage and resource values from SonicPanel, Plesk, Hetzner Cloud, Linode and OVHcloud no longer show as 0 or Active, and data with a panel error stays on screen 30 seconds, not five minutes
- Import wizard: a Clean Install from WISECP stopped at the Products step because of software products; software products are now kept, services are linked to them, and a stopped import says which step it stopped at
- Pterodactyl and Pelican: servers, products and services moved from 3.x work again (API key from the Password field; egg, location and IDs from the 3.x fields), and backup schedules send each ignored file separately
- Virtualizor: login no longer fails on a differently shaped single sign-on answer, redirects are no longer all reported as authentication failures, failed calls are logged; import search filters and lists over 100 VPSes
- VNC console: on SolusVM 2 setups with a separate management server and compute node it asked for a password and could not connect; it now connects and no longer shows the server address in the client area
- SonicPanel: accounts were created with a password containing symbols, which SonicPanel cannot handle; a letters-and-digits password is now generated and saved to the service
- Module queue: the Details button on the service page opens the task window again, now in the panel language, and a failed service setup sends admins one notice per automatic run instead of one per retry
- Software licensing: the add-on list in the license answer now carries the catalogue add-on ID, the same for every customer, so hasAddon() works in the seller's software
- Client area: a service that will not renew (fixed-term product, renewal invoicing turned off) shows an end date and “No Renewal” instead of a next renewal date and an auto-renew switch
- Backups: nested .git folders and the folders a 3.x upgrade leaves at the installation root are now left out on every server, so backups no longer grow by a whole 3.x installation
- Tabbed product categories show only the billing periods the open tab's plans are priced in; when the selected period is missing on another tab, it switches to yearly
- Software store: the FAQ entered in the group settings and categories is now shown, the product page view counter uses the right plural, and the pager arrows are read out in the selected language
- Admin panel: deleting a single document from the Domain > Documents list works again, and delete actions answer a request with no selection with an error in the panel language instead of success
- Backups: a renamed backup folder is no longer included in file backups, so each backup stops carrying all earlier archives, and retrying a failed local backup no longer leaves the old archive on disk
- Website content: blog posts get a Tags field, saving a page, blog post, news item, reference or knowledge base article no longer erases its stored keywords, and link previews show the content's own cover image
- Client details: a mobile number no longer shows an extra digit or gets marked verified on an unchanged save; trust score settings, badge tooltips and Silver and Gold labels use the panel language and correct plurals
- Personal data: sign-up accounts now record and show the consent date, the Privacy Policy line no longer has a dead link when no page is selected, and the admin badge states consent instead of GDPR compliance
- Settings → Other: after a list limit was left empty, Save Changes stopped working without any message; an empty limit now means the built-in default and an invalid field opens its section with a warning
- WHMCS import: the Clients step no longer stops with "1 Phone is ..." when the third source client's phone is in WHMCS's international format, which also blocked the orders, services, invoices and tickets steps
- Languages: an unwritable language file now reports an error instead of success, saving a non-existent language or creating one through the admin API is refused, and a folder without a package file is not listed
- Activity logs: a deleted user's actions show their ID instead of System, manual runs and retries say queued, recovery-key 2FA entries drop the masked placeholder, cash and restore entries use the reader's language
- Error messages: unprivileged staff get a clear refusal instead of a broken response, the database error page gives a searchable code and names a full disk, and failed queued module actions show the provider's reason
- Theme template changes delivered by a fix package could stay hidden until the compiled templates were cleared; pages now pick them up right after the package is unpacked
- Health and Updates pages: the web exposure check also covers blacklist evidence screenshots, the OpenLiteSpeed advice says to restart first, a long cron outage reads as a duration, and a Greek note is fixed
- Menus: saving a large mega menu no longer fails with a database error, and sign-in and sign-up menu items follow the client sign-in and sign-up settings and are hidden from signed-in clients
- Language switcher and hreflang: posts, announcements, references and pages list only their translated languages, the default language uses its canonical URL, and untranslated knowledge base pages point to the original
- Server services: Hetzner Cloud and OVHcloud client Overviews list snapshot and IP quotas, SSL and extra disk notices no longer promise an outcome, and backup type, activity result and custom ISO badges are translated
- Admin API: module methods that list records (registrar domain and TLD import lists, fraud records, blocked IPs) now return filled rows and accept paging and search fields in the request body
- Hooks: listeners registered as an array, a Class::method string or an invokable object were accepted but never ran; they now run like closures and function names do
- Financial settings: a failed exchange rate update says the currency module returned no usable rates, the Currencies page opens with modules that have no settings, and the PDF font download message counts font families
- Logging in to the client area from the admin panel, and other admin actions that open a new tab, now work on iPhone and other pop-up blocking browsers by opening in the same tab
- Social login settings: the Apple check now validates a newly entered private key before it is saved, and the check is labelled as a settings check instead of a connection test
- Home page editor: the Features section shows the title and description set in the theme's homepage settings, and new item titles, media texts and block errors appear in the panel language
- Admin dashboard: the untrusted proxy warning no longer appears when only the administrator's own network adds a forwarded address, and the overdue, upcoming and in-process counts use each language's plural forms
- Sites updated to 5.0-beta.3 now also get the activity log texts for order-cancellation line drops, order-cancellation invoice cancellations and failed domain transfers
- Client, service and invoice links on several admin screens opened the list instead of the record
- Saving a service that has no payment method on record no longer logs a false payment method change
- Deleting a ticket, invoice, order or service also removes its bell notifications, so unread counts stay correct
- The Invoice Paid email showed the due date in its payment date box
- The reseller discount line on an admin invoice showed the raw tier key once the tier was removed or the reseller account was closed
- A company address saved with LF-only line breaks was printed on a single line on invoices
- No invoice created notice for invoices that are already paid or cancelled
- Automatic payment changes on a service appear in the client's activity log
- Setup guide payment step button names the Payment Gateways screen
- Plan change emails show the customer's real previous package price and billing period again, and package names in the customer's language
- A negative commission rate on a payment method is now refused instead of being saved and silently ignored
- Deleting a saved card now tells whether the payment gateway removed its copy
- The getting-started guide no longer waits on the tax step when you do not charge tax
- Balance history showed a fixed “Admin” when the staff account behind an entry no longer existed
- The international SMS price summary now counts selling-price changes, not only provider cost changes
- Notifications: the client bell now shows the balance threshold and the SMS sender ID, and the low-balance email shows the amounts in the account currency
- Theme Settings: uploading the International SMS page background no longer processes the same image twice
- Invoice PDF: blocks spanning the full width ran past the right margin, the notes box almost to the paper edge
- Sign-in records: a session renewed through Remember Me kept the location of its first sign-in
- API logs: the request detail shows a deleted credential the same way the list does
- Registrar import tables explain an empty submission instead of a bare 'Import Failed', no longer offer sorting that cleared selections, and TLD import errors keep the provider's reason
- The IP details window counted staff sign-ins as clients and opened staff rows on a missing page
- Staff “Sign in as client” sessions were counted as the client's own sign-ins
- ConnectReseller settings asked for a Reseller ID that the module never used
- Opening a ticket attachment link while signed out showed a 404 page instead of the sign-in page
- The home page About block button opened # instead of the address typed into Button Link
- Activity log entries for notification template, theme, language and home page block changes now keep the item key instead of a masked value, so they can be searched and read
- Failed add-on module actions now show the provider's reason
- Opening the error log in the feedback window no longer turns its icons into crosses
- While previewing a theme, the preview tag in the bottom-right corner covered the chat bubble so the chat could not be opened, and it shifted sideways whenever a dialog opened
- Health Status reported 'PHP Session cannot be written' when sessions are stored outside the file system (Redis, memcached)
- A staff member's language no longer changes the website language, signing out keeps it, and signing in to the client area from the client card opens it in the client's language
- Social sign-in providers show the right status right after saving
- Add-on option lock warning now names pending and suspended services as well
- URL configuration save showed an untranslated or raw system error when the address list could not be read
- The service page offered a DNS records tab for registrars that cannot manage DNS records
- The trusted proxy sync result no longer blames the provider response when the new ranges cannot be saved
- Product statistics no longer claim a product was never sold when it only has no active services
- Message previews now tell why the content is hidden: never stored, confidential, or unreadable
- The error page is no longer cut short when a failure happens while extensions are loading
- Automation: job titles and summaries read in the viewer's language and say what really happened (skip reasons, blocked or failed notices, removed counts, schedules, dates)
- The browser tab title of a discounted invoice's detail page and of the notification template settings page showed only Admin Area
- Activity logs, client notifications and invoice history read in the viewer's language; seven actions that showed a raw key now have a sentence, and search matches the text on screen
- Turkish admin menu names the Payment Gateways screen consistently
- Admin API: retrying a backup whose upload failed now resends the archive still on disk instead of rebuilding it, as the panel does
- Basic theme: the mobile menu no longer shows Sign In and Sign Up to a logged-in customer
- WDNS: a refused or failed DNSSEC change now explains itself in the client area and is kept in the module log
- The SMS cost update now says plainly when the primary currency is missing
- Client profile: the General notification category is shown locked as Always On, and never-saved preferences no longer appear as all off
- Invoices by Payment Gateway table now labels its count column as invoices, not transactions
- Invoice detail (admin): the overdue badge used a single plural form ("1 days overdue", and in Russian the wrong ending for 1, 21, 22 days); it now follows each language's plural rules
- Notification templates: English text left in Russian, Dutch, Spanish, French and Italian was translated, and Turkish invoice notices use the right wording
- Payment panel: a gateway that refuses to prepare its screen now shows a translated message instead of the provider's raw error text, and logs the provider's wording for the administrator
- In dark mode, focused form fields lost their outline and placeholder text kept the light theme's grey
- The client's feedback from the cancellation form was missing on the service detail page
- A service whose control panel offers only single sign-on no longer opens an empty Management tab with a technical notice
- Notification e-mails without a footer logo of their own now show the site's header logo instead of the dark-mode logo that was invisible on the light footer
- Menu management: confirmations and messages now appear in the admin panel language, and the delete confirmation no longer says the deletion cannot be undone
- Several screens no longer fill the error log with needless warnings (order list, client picker, Virtualmin account card, notification e-mails)
- The notification template editor no longer requests image addresses written with template variables (such as {$website_url}/…) as page links, which caused 404 errors and broken image icons while editing
- A product group whose categories are shown as tabs displayed the first category's heading and short description on its own page instead of the group's
- After filling in the missing required profile fields, the client returns to the page they were on, such as the checkout
- Service location no longer shows a wrong country flag for node names that start with a country code
- A signed-in customer can now open a guest ticket link instead of landing on a 404 page
- Service history now names the tool and the action in a tool row instead of printing raw keys
- Duplicate account table counted the day offset from the wrong account
- The update history shows the date a release was published instead of the date it was first prepared, as soon as the update server sends that date
- Admin API: creating or retrying a backup on a server without a required PHP capability now returns 422 system_incompatible instead of a server error
- Domain details: the Auth (EPP) code dialog now names the masked account email the code is sent to instead of the domain name
- The SMS sent when staff mark a ticket resolved no longer says the customer stopped responding
- Withdrawals cancelled by a partner block now show the reason in the panel language and record the cancellation date
- The ticket custom field form opened a tab for every installed language instead of only the languages the field is translated into
- Theme texts a language deliberately leaves empty no longer print their internal key name
- Dropdown menus no longer show an empty icon box for menu items that have no icon
- Domain service emails showed the English group label frozen at order time instead of the customer's language
- More messages, labels and dialogs follow the panel language instead of fixed English or Turkish (backups, automation, API keys, departments, products, server groups, ticket merge, icon picker and more)
- Automation results showed customer names, cancellation reasons and add-on names as HTML instead of plain text
- The expired-order automation result showed the customer name as HTML instead of plain text
- API key confirmations in the client area showed a cut-off or empty message, or an English one in other languages, because the translation's quotation marks ended the attribute early
- The home page title now falls back to the site name when the SEO title is left empty
- Service tool errors name the field as its form shows it, in the panel language
- Multi-line access details attached to a ticket reply collapsed onto a single line
- Service history shows the time as well when a date is changed within the same day
- Orders created by staff name products and add-ons in the client's language
- The SSL certificate and SMS package groups had no name in reseller discount tier names, the service picker of the ticket forms (admin panel and client area) and the service group variable of notifications
- Theme preview left the internal route parameter in the address after starting or leaving a preview
- Admin API privilege groups reject unknown permission keys
- After switching the language, the first page showed module names such as addon menu items in the previous language
- Add-on status changes show the provider's reason when the module refuses
- Activity log rows show names and IDs, module logging can be switched off, and table searches under a language prefix follow the page language
- Client area shows a refused incoming domain transfer with the registry's reason
- A Brazilian Portuguese browser opened the site and the install and upgrade wizards in European Portuguese, and the browser's language preference order was ignored
- Scheduler safe mode now reports the true number of cleared cron jobs
- Tools > Addons: after disabling one addon, the confirm button of the next disable (and remove) dialog no longer stays locked until the page is reloaded
- The "Send me a copy" option of the client page's custom SMS now actually sends a copy to the staff member
- Trust score tier points are now kept between 0 and 100, so a client's trust score can no longer drop below 0
- Advanced settings now warn that, while the cookie notice is off, site codes such as live chat or analytics load only for visitors who consented earlier
- Approving several cancellation requests at once now reports both the services cancelled now and those cancelled at the end of their billing period
- An expired card can no longer be made the default from the admin panel or the admin API
- Account suspension email in the Aurora design no longer states a terms violation as the reason
- The ticket assignment email now names the staff member who made the assignment and greets the assignee
- Panel times now follow the panel's time zone when the browser is in a different one
- Suspending, unsuspending, cancelling, reinstalling or changing the password of a service now shows the server module's own reason when the module refuses
- Ticket history now shows what an automation rule changed
- Pinned client notes show who pinned them, and the pinned-note banner looks the same before and after a reload
- Notification template list showed panel-only templates as sending nothing
- Setting a client's password from the admin panel now states the configured minimum length when the password is too short
- Notification queue actions are now recorded truthfully in the activity log from both the admin panel and the API
- Dashboard widgets no longer overlap or leave gaps after being dragged to a new position
- Server preferences and the service preferences list now show a module’s own tool names
- Cancelled license transfers appeared in the writer's language in the service history
- Service activity now names a management tool the way its module does
- Opening the PHP settings editor no longer adds a row to the service history
- Support Analytics status line now names the fourth measure as resolution rate
- Order configure page: billing period names no longer break letter by letter on phones, and the domain options no longer push the page sideways
- Account settings: saving the security question now refreshes the page, so the incomplete-profile notice and the answer field show that it was saved
- Admin API: the notification queue list and detail now return the SMS recipient's country code (recipient_cc)
- AI Assistant: Ask AI could answer a staff member's question in the client's language
- Virtualizor: RAM set in round decimal steps (8000 MB) now reads as 8 GB, the figure the Virtualizor panel shows
- AI Assistant summaries are written in the staff member's panel language, and AI replies and summaries read the client's original message even after it has been translated
- The notification line on the admin order form now says what the switch will do
- Colors taken from an uploaded logo could come out almost white or almost black; gradient and metallic logos now give a readable brand color
- Country names now appear in the visitor's language: in newly enabled languages, in nine leftover Turkish entries and in phone number fields
- Settings, help texts and confirmations across the panel now describe what really happens (license transfer, affiliates, coupons, trust score, two-factor, robots, security, document verification, sub-accounts and more)
- The check icon on the Create Backup dialog and the authentication method cards is visible again on installations set up from the release package
- The custom SMS window in the client profile now counts message parts correctly for Arabic, Turkish, emoji and other Unicode text
- Logo uploads and the icon picker now enforce the size limits they state
- The theme text search now reports matches in another language as a count of matching texts, not word repetitions
- The loyal client badge tooltip in the client summary now shows the year threshold set in badge settings
- The core update check summary no longer says the automatic installation switches are off while they are on
- Reseller settings amount fields no longer show an English-only example prefix
- Product groups: sub-categories without their own listing template follow the group's layout, and the category form pre-selects the inherited template
- Mailcow: sync job windows show the interval unit in the panel language, and the App Passwords page no longer shows the sync hint without a mailbox
- Tickets: the ownership notice for staff outside every department no longer says “this department”
- GDPR: the consent record retention help no longer presents 395 days as a legal ceiling
- ProxmoxVE: the resource alert e-mail template that ships with the module now uses the phone-friendly stacked layout
- ProxmoxVE: installations that already had the resource alert e-mail template also receive its corrected Ledger layout, unless their copy was edited
- Invoice payment pages: the amount, fee line, button label, selected method, balance option and pay block no longer change a moment after opening; over plain HTTP they say HTTPS is required, not that the session expired
- Invoices: the bulk Approve window says invoices are marked as paid and which are skipped; invoice, periodic expense and cash windows use the singular for one record; the split notice shows the new number correctly
- Resellers: activate/terminate messages say how many really changed, the conditions text calls the first amount a minimum top-up, reseller and affiliate counters use the right plural, the list shows no invalid date
- Client details: badge tooltips and the age option match how they are calculated, balance auto-payment texts say what really happens, and service history names the automatic payment setting instead of automatic renewal
- Panel language: automation job results, currency rate errors, payment details title, periodic expense days and IP details no longer show codes or English; tax state option and three log events show their text again
- Website and client area: copy-to-clipboard messages, the notification close button and the screen reader labels of list page arrows now follow the site language
- Akbank Payten and İş Bankası: the Test Mode switch, which never had any effect (payments always went to the live bank), was removed from the payment settings
- On PHP 8.5, the panel settings, payment modules and the fraud check no longer write a "Non-canonical cast" deprecation to the error log
- Ticket view: list items in replies no longer run together, long unbroken lines stay inside the message box in the client area, and the lower part of the right-hand column is reachable on laptop screens
- E-mail templates: the verification mail sent from Account Settings no longer shows a verify button that leads nowhere, Aurora ticket e-mails keep line breaks, and Ledger SMS sender ID e-mails show the country name
- Staff notifications: the cancellation request SMS shows the timing as a readable label, the Ledger cancellation request e-mail says when the client wants it done, and the Proxmox resource alert shows a percent sign
- SSL and domain expiry e-mails said "1 days" when one day was left and their German sentences were corrected; the domain redemption and overdue invoice subject lines use a colon instead of a long dash
- Domain screens use each language's plural forms (term, search selection, DNS record count, client dashboard expiry alert), and the Turkish domain page suggests .com.tr instead of .com.br on new installations
- Ticket counters and bulk dialogs use correct plural forms, the satisfaction score the local decimal mark; logs name the guest when a guest ticket moves to a client and show status and priority in the reader's language
- Backup and restore notifications write the contents, destination, stage, restored parts, failed step and health line in each recipient's language instead of internal codes
- Client area SMS panel: the character, message, recipient and country counters use each language's plural forms, and the delivery report CSV is downloaded in the panel language
- Help texts and messages now match what actually happens: the ticket lock and domain grace and redemption tasks in Automation, the partner block dialog, SSL validation hints, and cron and e-mail name errors
- Notification management: the notice sent when a ticket moves to In Progress is no longer called "put on hold", the template engine help shows its condition example again, and template errors follow the panel language
- More admin panel error messages follow the panel language: actions that fail without an explanation, records that no longer exist, bulk notification and queue checks, and WHOIS lookup errors
- Automation job results: core update, backup restore, ticket task, email piping, maintenance, notification and domain price sync jobs show their labels in the panel language and counts in the right plural form
- Admin panel: the IP details tooltip uses the panel language, bot protection rows show names instead of codes, feedback dialog file sizes use local number format, and module log filters show sample values, not real ones
- Automation: the cancellation task says it cancels every overdue service and add-on, not only suspended ones, and the license check that it renews the license file only at expiry; metric results use the panel language
- Service descriptions corrected: license transfer no longer promises an invoice without a fee and says blacklisted owners can be blocked, auto-pay uses the balance before the card, and forwarding has no frame option
- Servers: the delete and deactivate warnings say any linked service that is not cancelled blocks the action, not only active ones, and the HTTPS-to-IP warning says the certificate must cover that IP
- Change Panel Password: the field asking for the client's own password is now named “Client Area Password”, and staff signed in as the client are told to use the admin panel instead of a misleading “incorrect password”
- Client area: remaining days in lists match the detail page, the service information card fits phones, the upgrade list shows each cycle once, and actions failing without a message now show one in the site language
- Service dashboard: an unlimited bandwidth gauge shows the unlimited sign instead of a dash before any use, and server power actions show progress on the tile until the provider answers and cannot be clicked twice
- Product categories: a subtitle longer than 255 characters failed with a database error and the field is now limited to 255; the new product form's category list no longer shows raw icon HTML for sub-categories
- SMS notices: the scheduled downgrade warning and the domain purge notice no longer join two sentences with a long dash, so the English and German texts no longer switch to Unicode because of that sign
- The cron self-check now reports PHP 8.2 as the minimum version, matching the product requirement; PHP 8.1 no longer passes
- Activity log: entries for saving localization settings and deleting a product image now describe the right thing, and deleting a product delivery file or order image through the admin API records the product name
- Error log: the admin menu of staff without Tools access, the Plesk client dashboard while the panel is unreachable and operation hooks that overwrite variables or return output no longer write a warning each time
- Admin service screens: DNSSEC, forwarding and license transfer windows, subscription badges, requirement types and sizes, action errors and the status tooltip use the panel language; history shows quantity changes
- Product management: import errors, example values, drag and delete tooltips, unnamed item names, add-on and requirement errors and server import headers use the panel language; a new requirement now says “created”
- Service tools: SSL management, file manager, PHP INI editor, game subusers, network, firewall, activity log, extra disk and SonicPanel texts follow the panel language, and file sizes its number format
- Help pages: upgrade wizard error details show in the reader's language, and license days, release note and system health counters and the module update dialog's review count use the correct singular or plural
- Counts follow each language's singular and plural rules in SMS reports, action windows, renewed service periods, WAnalytics, the premium license panel, subuser permissions and SSL SANs; some texts printed a fixed 1
- Backup screens: queued and running backups are told apart, the destination delete refusal no longer calls schedules active, the compatibility card shows a lone notice, and errors and picker messages are translated
- Automation: older job rows show and search in the panel language, metric collection skip reasons are no longer internal codes, the update task description is current, and chart and retention units use correct plurals
- Account settings: the profile photo hint no longer claims a minimum size, staff avatars accept only formats that display (JPG, PNG, GIF, WebP), and a failed passkey addition shows a message in the panel language
- Website management: a new contract shows its success message, deletions name what was deleted, the Contracts section name matches its buttons in four languages, and contact folder clear dialogs use the singular for one
- Document verification and cookie consent: delete dialogs label the filter and client in the panel language, the nameless filter error asks for the Name field, and counts of one use the singular
- Affiliates: cookie and clearing periods use the right day form, failed requests are reported in the site language, and affiliate management errors and the withdrawal check's loading label use the panel language
- Client area: API page counters, the All option, permission hints and errors and dashboard dates follow the site language, tables no longer show a raw _MAX_, and newsletter unsubscribe texts end with a period
- Admin panel: messages and labels left in English on the theme, logo library, language tools, department icon upload, Captcha and bulk action screens, plus the staff access group name, now use the panel language
- Logs and figures: Error Logs, Module Logs and queue counters and sizes and module ratings follow the panel language, WAnalytics puts the minus before the currency, and shortened API log responses get a translated note
- Plural forms: fractional counts in Arabic and other languages, durations, relative dates (1 month ago), knowledge base counters, blog reply counts, the support target gap and the AI field assistant use the right form
- Screen readers: admin dialog close buttons, the two-factor setup QR code, blog pagination arrows, the knowledge base breadcrumb, galleries, review sliders and the announcement popup are announced in the page language
- Admin date picker: the Greek language file was missing from the package so month names stayed in English, and the month and year controls are now announced to screen readers in the panel language
- Admin sign-in page: the Appearance panel's colour, typeface and menu controls and Reset to Defaults now work there, Reset also clears the menu direction, and screen-reader progress labels follow the page language
- Admin layout: on phones the list search box keeps room for text and last-row menus open upward, the horizontal menu restores its layout after resizing, and removing an element with an open tooltip raises no error
- Admin panel badges: neutral, warning, gold and silver soft badges meet AA contrast for small text, and one status badge family no longer borrows another's colour and icon on the same page
Cambios y retiradas
- Orders are now approved, and stock is deducted, only when payment is received
- Services and add-ons are no longer suspended or cancelled before their renewal invoice is due
- Auto-payment now collects within a configurable window around the service due date instead of the morning the invoice is issued
- Breaking change for Client API integrations: domain endpoints now answer a registrar's reasoned refusal with 422 and an unreachable or silent registrar with 500, as the Admin API does
- The low-balance reminder is now off by default: turn it on under Automation > Other Settings; when on, it honours its waiting period instead of reminding daily
- The home page now lives at the site root; /home redirects there, and logo, canonical and hreflang links point to the root
- The admin sidebar now starts collapsed until you open it
La estructura del tema ha cambiado en esta versión. Revise las diferencias antes de actualizar un tema personalizado. Revisar las diferencias en GitHub
En esta versión
- Fecha de publicación
- Cambios en el tema
- Ver las diferencias