= 3.1.6 - 2026-08-13 =
* Tweak: The admin area was redesigned. The top navigation is now a segmented control, the footer cards sit in a four-column grid, ticket status pills use semantic colors, and the primary action buttons share one style across the whole settings page.
* Tweak: The support footer now has a "Rate this Plugin" card linking to the WordPress.org review page, so the four footer cards fill one row.
* Fix: The "Dismiss" button of the version-notice box sat outside the card; it is now inside the card where it belongs.
* Fix: The Dashicons inside primary (lila) buttons inherited the WordPress default blue and clashed with the background; they are now white.
* Tweak: The ticket scanner and the ticket detail page now feel like one product. A design system was added - CSS custom properties for colors, spacing and radius, a BEM class structure on top of the existing IDs - and the parts that grew ugly over the years were cleaned up (hard-coded black border on the ticket box, the &lt;center&gt; tag on the scanner, the orphaned button_ok.png / button_cancel.png images). Every existing ID and class is still there, so a custom CSS file you wrote for an earlier release keeps working.
* Tweak: On the scanner page the ticket information no longer appears inline after a scan - the event name, date and seat only filled the space between the reader and the buttons, and on a phone the layout jumped around while the answer was on the way. While the scanner is waiting for the answer, the area shows a loading hint; as soon as the ticket is retrieved, a compact summary card appears (heading, title, date) with a color that matches the ticket state - green for valid, orange for expired or not yet redeemable, red for already redeemed. The full details open behind an "Show ticket info" button as a full-screen overlay with a close button, so the scanner display stays clean.
* Tweak: On the scanner the option row was moved up next to the buttons, so the "Scan and Redeem immediately" checkbox and its peers are visible right where the action buttons are. A new "Use classic layout" checkbox sits next to the existing "Use old ticket scanner library" one and toggles the scanner layout via a URL parameter - the same pattern that toggle uses.
* Tweak: The standalone ticket scanner is no longer preceded by a "Ticket Scanner" headline - it looks like a scanner device now, not like a page. On the public ticket view the wrapper no longer carries a hard border; the content sits directly on the page, with only the page's own padding for air. Scanner buttons are now 48 minimum height (56 for primary actions), so the person at the door in January gloves does not have to fight the touch target.
* Fix: The spinner shown while the scanner waits for the server was invisible on the modern layout - the CSS class that animated it lived only inside the legacy HTML page. The animation is now defined in the design system stylesheet, so the spinner shows wherever it is used.
* Fix: Three button styles in the scanner used three different looks - one was a bare HTML button, one used a class the stylesheet had never heard of, and one toggled between gray and green via inline JavaScript. They are now all built on the same BEM class, and the disabled state has a real visual treatment instead of just disappearing.
* Fix: The "Badge" and "PDF" buttons on the scanner did nothing to indicate the download was on the way. They are now disabled while the file is being fetched and show a small spinner inside the button label, restoring the original label as soon as the download is delivered (or fails).
* Tweak: The "AI Support Bot" card is gone from the support view. It answered from a knowledge base we stopped keeping up to date, and an answer about last year's plugin is worse than none. Documentation, release notes and the support address are where they were.
* New: A ticket can be passed along from the ticket page. On a phone the usual share sheet opens - WhatsApp, Telegram, Signal, mail, whatever is installed - on a desktop browser WhatsApp and Telegram are offered as links. That is how the second ticket reaches the friend who is coming along, and how the ticket gets from the laptop to the phone. Your shop sends nothing itself; the customer does. The page says out loud that whoever receives the link can show the QR code. Can be switched off ("Let customers send their ticket on"), and it is shown in every kind of ticket sale, including vouchers.
* Tweak: The last pieces of premium licensing left this plugin. The "Check License Server" button and the update dialog that appeared after entering a license key are gone - both reached out to our server from the free plugin, which is not what a plugin on WordPress.org should do. Updating premium is the premium plugin's own job ("Check license & update" next to the license key, version 1.7.3 and newer). What stays here is the display: the license status and a button to refresh it, which asks the premium plugin to do the checking.
* New: A message you can set for events where tickets are still sold at the door - it is added to the "sales closed" text when the premium version marks a product that way, so a buyer who arrives too late for the online sale is not left with a dead end.
* Fix: Tickets without a WooCommerce order could not be redeemed by typing their number into the scanner - the very way a printed card is meant to be checked at the door. It failed with "#9302" unless a second, separate option was switched on as well. Allowing tickets without an order is now enough.
* Tweak: The scanner said "Ticket is NOT paid ()." for a card that was never sold in the shop - a defect message for the case the feature is made for, with an empty bracket on top. It now says the ticket was handed out directly.
* Tweak: In the product's Event Tickets tab and in the ticket list, option keys no longer appear in customer-facing text. The settings page hides them in the entry view as well and shows them under "All options", where support answers need them.
* Tweak: The "Getting Started" checklist now reads the real state of your installation instead of guessing from counters. Until now it ticked off "assign a list to a product" as soon as any ticket existed anywhere, and it congratulated you for the ticket list that the plugin creates by itself. It also no longer counts a fixed four steps: what needs doing is what is listed.
* Tweak: In the product's Event Tickets tab, the ticket switch and the list now come first and the note about the free ticket limit follows below - it used to be the first thing in the tab, in red, before the setting it belongs to.
* New: After activation the plugin says where to go next, once, with a button - instead of leaving you to find the menu entry at the bottom of the sidebar. Installations that already have tickets are not bothered with it.
* New: The setup wizard now ends by showing what it actually switched on for you ("redemption locked until the event starts", "scan redeems immediately", …). The defaults fit most shops - you just could not see them. It also stops claiming you are all set while listing things you still have to do: what is left is one product, and the button goes straight there.
* Tweak: The warning about "Plain" permalinks was a dialog on every single page load, with no way to act on it. It is now the first step of the setup check, with a button that opens the permalink settings - and it is the one thing that still shows up even after you dismissed the setup check, because without it the ticket page and the scanner cannot be reached.
* Tweak: The setup wizard now remembers which kind of sale you picked. Until now the settings page asked the same question a second time, minutes after the wizard had already asked it.
* Fix: In dialogs, the recommended button is highlighted again instead of whichever button happens to sit on the left. In the setup wizard that meant "Skip" and "Back" looked like the main action while "Start Setup" and "Apply & Finish" looked secondary.
* Fix: A tip in the setup wizard showed "&#9889;" as plain text instead of the symbol, and the product tab said "Make sure your are not selling" instead of "you are".
* Fix: The free version asked for a premium license key. On a plain installation without the premium plugin, a dialog appeared saying "Thank you for using the Premium version!" and asked for a key that such an installation never had — a comparison error made "no premium version" look like "premium version installed, key missing". The dialog now only appears when the premium plugin is really installed.
* New: The plugin page now shows when the plugin was last updated, next to the version, with a link to the changelog of every release. Whether a plugin is still being looked after is a fair question, and the answer belongs where you are, not on a sales page.
* New: A setting that belongs to a different kind of sale but was changed anyway is now shown in the filtered view instead of being hidden - highlighted, with a note that it can make your shop behave unexpectedly and a "reset to default" button right next to it. Those are exactly the leftovers that cause the "it does something I never asked for" cases.
* New: "Restore the defaults of this view" resets only what is currently in front of you, and lists beforehand which settings would change. The existing button that resets all options is untouched.
* New: Existing installations are asked once which kind of ticket sale they run. Whoever answers gets the filtered view, whoever declines keeps all options and is not asked again.
* New: The settings page can now show only the settings that belong to your kind of ticket sale. Pick your event type once - event tickets, day passes, memberships or vouchers - and the page starts with the handful of settings that decide how your shop behaves (14 instead of 306). From there it is one click to everything that belongs to your event type, and one more to all options; nothing is ever hidden for good. The search always looks through every setting and tells you when a match sits outside your event type.
* New: The settings page has a search field. Type two letters and only the matching settings stay on the page - it searches the name, the description and the option key, so you can also paste the key from a support answer or from the documentation ("wcTicketHideTicketAfterEventEnd"). The number of matches is shown, the search term is highlighted, "Esc" clears the field and the "/" key jumps into it. An empty field brings the page back exactly as it was.
* New: Once the setup check has nothing left to report, you can dismiss it for good with the small x. From then on it is not only hidden but no longer worked out either - a finished installation pays nothing for a check it does not need. Clear "setupStatusDismissed" in the settings export to bring it back.
* New: The settings page now opens with a short setup check that reads your actual installation instead of showing you more options: is a product connected to a ticket list, and does your door team have access to the ticket scanner. Every open step has a button that takes you straight to the right place; once both are done the check simply confirms that you can sell and check tickets.
* New: Tickets can now work entirely without a WooCommerce order, for printed cards you hand out yourself. Create the ticket numbers in a ticket list as before, switch on "Allow tickets without a WooCommerce order" — either globally in the WooCommerce settings or for a single ticket list — and the scanner accepts them, shows them and redeems them. Both switches are off by default. Note what you give up for those tickets: the plugin can no longer verify them against a paid order, only that the number exists, is active, has not been redeemed yet and belongs to its list. Tickets sold through WooCommerce are untouched and keep the full check.
* Tweak: This plugin no longer contacts the license server of the premium version. That check now lives in the premium plugin itself, where it belongs — this plugin only stores the answer and uses it to switch premium features on or off. If you use the premium version, update it to 1.8.0 or newer; until you do, your premium features stay switched on and the plugin asks you to update instead of expiring them.
* New: Scanner auth tokens can now be restricted to ticket lists, not only to products ("Bound to ticket list(s)" when editing a token, comma separated list ids, empty means all). A door team then only redeems the lists it is responsible for — for a venue with its own ticket list, one token per venue. This is also the only restriction that can apply to tickets without an order, because those have no product to bind a token to.
* New: A ticket list can carry its own event window ("From" / "Until" with date and time). It applies to tickets without an order, which have no product to take event times from, and is governed by the same scanner options as before — no redemption before the start, none after the end, or none after the start. Empty means no time limit.
* New: Seat order can now be arranged by hand. A "Seat Order" button above the seat list of a simple (dropdown) seating plan opens a drag-and-drop list; the order you save is the order buyers see in the seat dropdown. Until now the order was fixed to the sequence in which the seats were created.
* Tweak: The action buttons of the seating plan list no longer wrap onto a second line — the column is wider and kept on one line.
* Fix: The "Go to Seating Plans" and "Create one first" links in the product panel, and the admin link passed to the frontend seat selector, pointed to a non-existent admin page (`?page=sasoEventTickets`). Following them produced "Sorry, you are not allowed to access this page." The links now use the correct page slug so the seating tab opens as expected.
* Tweak: Plugin description and FAQ now clearly state the 50-ticket free-version limit and the exact free-tier caps (5 ticket lists, 1 seating plan with 20 seats, 3 scanner auth tokens).
* Tweak: Removed unverified social-proof claims ("4.9/5" rating, "1,000+ event organizers") and replaced with the verifiable WordPress.org metric ("Active on 1,000+ WordPress sites").
* Tweak: Removed named-competitor comparison (Eventbrite, Ticketmaster) from the plugin description.
* Tweak: "No per-ticket fees" clarified to "No per-ticket service fees" with payment-processor qualifier.

= 3.1.5 - 2026-08-10 =
* New: Online sales can now be stopped a set number of hours before the event starts ("Stop online sales before the event starts" in the WooCommerce settings, off by default; when switched on it stops sales two hours before the event unless you change the number). Useful when you also sell at the box office and want the online shop to close first. Products without an event date are never affected; for day-chooser products the date the customer picked counts. Buyers are told when they add the product to the cart, and a cart that was filled before the cutoff is blocked at checkout. The message is configurable.
* Tweak: When online sales have closed for a ticket, the buy button is now hidden on the product page and in product lists, and a short line explains why, instead of letting the buyer add the ticket and only failing afterwards. This also covers direct "add to cart" links. Products without an event date, day-chooser products (the buyer picks the date later) and everything that is not a ticket are never affected, and the shop admin still sees the normal buttons in the backend.
* Tweak: If a buyer leaves a ticket in the cart until online sales close, WooCommerce drops it from the cart — the wording is now yours instead of WooCommerce's "please contact us if you need assistance", and can be changed in the settings ("Message when a closed ticket is dropped from the cart"). Items removed for any other reason keep the WooCommerce text.
* Fix: The "Same-day cutoff time" of day-chooser products was evaluated in the server's timezone instead of the shop's, so on a site ahead of UTC it took effect hours too late — with a shop in Central European Summer Time, a cutoff set to 17:00 only blocked today's date from 19:00 on. It now applies at the time you entered, in the timezone configured in WordPress, both in the date picker and when the cart is checked. The date picker previously also used the buyer's own browser clock, which gave visitors abroad a different cutoff than the one enforced at checkout; it now follows the shop's clock as well.

= 3.1.4 - 2026-07-26 =
* New: Optionally require a valid ticket or access code to purchase a product. Pick the required event/code list in the product's Event Tickets tab — until you do, nothing changes for any product. Buyers enter their code in the cart and can only check out with a valid, unused code from that list. Use it for presale and access codes, or to require a ticket from an earlier event — for example a group-stage ticket in order to buy the final. Free.
* New: Per product, the same code can optionally unlock several purchases ("Allow the same code for several purchases"). Off by default, so each code unlocks exactly one purchase.
* New: The cart tells the buyer straight away whether the entered code was accepted, is already used, or is not valid for that product — instead of only failing at checkout.
* Fix: The global switch "Allow requiring a ticket or access code to purchase" now really disables the feature everywhere when switched off. Previously it only controlled the cart script, while checkout still demanded a code for any product that had a list assigned — which, combined with the cart field not submitting the code, could make such a product impossible to buy.
* Fix: On hosting accounts where the server's temporary directory cannot be written to (common with Plesk, open_basedir or PHP-FPM private temp directories), ticket PDFs were never created. The plugin still passed the file path on, so the PDF merge failed and the order email was sent without the ticket and without the calendar/info attachment — with no visible error. The plugin now falls back to a folder inside the WordPress uploads directory, and reports a clear, actionable error if no writable location exists at all. The same fallback now applies to badge PDFs and to all email attachments, which previously failed silently on these hosts as well.
* Fix: Merging ticket PDFs no longer aborts completely when a single source file is missing. Unreadable files are skipped and logged individually, so the remaining tickets are still delivered.
* Fix: The "Delete All Tickets" button on a ticket list failed with a server error instead of deleting anything. The button never worked since it was introduced; it now removes all tickets of the selected list, including their WooCommerce order data. Long lists are deleted in small batches with a progress bar, so even lists with many thousands of tickets no longer run into a server timeout.
* Fix: On hosts that run a different PHP version for WP-CLI than for the website (IONOS and similar split-PHP setups), the plugin's template-engine PHP 8.1 check no longer aborts WP-CLI runs with a fatal error. Ticket and scanner pages are never rendered from WP-CLI, so the check is now skipped in CLI mode. This prevents some hosts from auto-disabling the plugin after a WP-CLI or cache-build run. Website behaviour is unchanged — the actionable PHP 8.1 notice still appears when a ticket or scanner page is opened under an older PHP in the browser.

= 3.1.3 - 2026-07-12 =
* New: Interface translations expanded to the full language set — added Arabic, Czech, Danish, Greek, Hindi, Korean, Norwegian Bokmål, Polish, Romanian, Russian, Swedish, Turkish, Ukrainian, Traditional Chinese, plus corrected Japanese (ja) and French (fr_FR) locale files.
* Fix: When a server runs the plugin folder under PHP below 8.1 (required by the bundled template engine) — which can happen for files opened directly from the plugin folder even when the main site runs a newer PHP — the ticket and scanner pages now show a clear, actionable message instead of a blank 500 error. The message points to the "Ticket detail URL path" option and to enabling PHP 8.1+ for the whole hosting account.

= 3.1.2 - 2026-06-22 =
* Fixed: Support info no longer shows a broken "Own URL" with a double slash when no ticket detail URL path (compatibility mode) is set — both the displayed cards and the copy-to-clipboard text now show "(not set)" instead.

= 3.1.1 - 2026-06-15 =
* New: Event portals — the Congress tool now works for any event (opera, zoo, festival, …).
* New: Optional card-grid landing showing each page as a card with an icon or image and a short description.
* New: Customizable portal label per portal (with a global default, "Infos") — used on the page, in the wallet action and the order email.
* New: Back-to-home control in the portal view.
* New: Insert ticket/order/product/customer variables into info and custom section text; they are filled with the visitor's data when the page is opened.
* Improvement: Internal data and links are unchanged — existing congresses keep working exactly as before.
* Improved: Cleaner admin dashboard — moved the "List of tickets" description into the list card next to its buttons and removed the redundant heading and divider.
* New: Speaker sections — add one or more speakers (photo, name, title, short bio). A single speaker is shown in full; multiple speakers appear as a grid of cards with a detail view and a back control.
* New: "My ticket" entry in the portal always shows the ticket's QR code, so attendees without a printed badge can present it at the entrance.
* New: Portal entries (such as "My ticket") also appear as cards on the card-grid landing.
* Improvement: The portal title is now clickable and returns to the start page; the "Add to Vollstart Wallet" link moved from the header into the "My ticket" view.
* New: View access toggles (security) — each output reachable through the ticket link (ticket detail view, PDF, ICS calendar, badge PDF, all-tickets-in-one-PDF, event portal/congress) can now be switched off individually. When off, the view is no longer rendered and a short "deactivated" notice (or 403 for downloads) is shown. All default to on, so existing installs are unaffected. Unlike the older "hide button" options, this actually blocks the URL.
* New: Optional "Allow redemption by plain ticket number" (off by default). When enabled, a ticket can additionally be redeemed using only the plain ticket number printed on the card; the full ticket id keeps working as before. Note: for the plain number the copy protection does not apply, and it is unsafe together with ticket reuse (a warning is shown on both options).
* Fix: Settings checkboxes whose default is "on" (e.g. the new view-access toggles, the QR scanner on the validation form, the seating-plan/venue buttons) could appear unchecked until the settings page was saved once. The admin UI compared a boolean default too strictly; it now renders the correct checked state. The actual behaviour was always correct (the option was on) — only the checkbox display was wrong.

= 3.1.0 - 2026-06-04 =
* New: Congress mode — organizers create congress objects (programme, downloads, texts, media) and assign them to WooCommerce products.
* New: A dismissible "What's New" banner in the admin introduces the Congress feature (shown once per version).
* New: Ticket holders open the congress page via their ticket ID. Like the ticket detail and scanner pages it is served from the plugin path (`…/ticket/{ticket-id}?congress`, query fallback `…/?code={ticket-id}&congress`), so it is compatibility-mode aware and never collides with shop page slugs.
* New: Offline-capable congress page with a Web App Manifest (installable as a mini PWA).
* New: Sections with optional password protection (server-side transient, 1h TTL).
* New: Programme sections with a day/slot structure, plus download and media sections (WordPress Media Library).
* New: "New edition" button for recurring congresses — duplicates the congress and sets an automatic expiry date on the original.
* New: Option to activate/deactivate the public congress page (default: active); the admin area stays available either way.
* New: Event-relative access window — optional event start/end time per congress; global options control how many hours before the start access opens and how many days after the end the data stays available.
* Improvement: Congress assignment now lives directly in the Event Tickets product tab (instead of a separate tab); the dropdown shows the event/expiry date for easier selection.
* New: `congress_url` in the Wallet API response — the Wallet app shows an "Open congress" button when the product is assigned to an active congress.
* New: Congress URL pattern listed on the Support/System Info page (adapts to the site location); the admin ticket detail shows a direct "Open congress page" link for tickets whose product is assigned to a congress.
* Fix: Congress access now accepts the public ticket ID (as used by the Wallet/QR), not only the internal code — so the Wallet/customer link works reliably.
* New: Congress section editor with full input masks per type — Info/Custom use a visual editor, Download picks files from the media library, URL with internal/external link option, Program with day & time-slot structure, Media gallery.
* New: Congress sections now track and display created/updated date and the editing user.
* New: Visual text editor (TinyMCE) for the "Additional text on PDF ticket" and "Ticket Badge HTML" options instead of a plain textarea.
* New: Tag picker dropdown inside the Ticket Badge editor — insert replacement tags ({TICKET.*}, {ORDER.*}, {PRODUCT.*} …) at the cursor instead of copy-pasting from the list below.
* Improvement: Modernized admin UI — compact buttons, lightweight ghost-style table action buttons grouped together, navigation menu with active highlight, modern DataTables styling.
* Improvement: Congress editor redesigned as a clean card layout; all native browser confirm/prompt dialogs replaced with the plugin's own styled dialogs and loading spinner.
* New: Congress pages — sections are now grouped into pages (the first page is the start page). Visitors get a sidebar (desktop) / hamburger drawer (mobile) navigation; the start page loads instantly and other pages are fetched on demand, so large congresses stay fast.
* New: Congress section types Image (from the media library, with caption) and Video (paste a YouTube/Vimeo link for automatic embedding, or upload a video file).
* New: Image sections have a display-size option — full width (default), original size, or a custom width (px or %).
* New: Image sections can optionally open full size in a lightbox when clicked (default off).
* New: Download files can be set to "open inline" (PDF/images open in the browser) instead of forcing a download.
* New: Admin can create, rename, delete and reorder congress pages (drag & drop) and move a section to another page; sections are drag-sortable within a page.
* Security: All HTML content is sanitized with `wp_kses_post()` — no JavaScript allowed in congress content; video embeds are generated server-side via WordPress oEmbed.
* i18n: All new congress strings (admin editor + visitor page) translated into 11 locales (de_DE, de_CH, es_ES, fr_FR, hu_HU, it_IT, ja_JP, nl_NL, pt_BR, pt_PT, zh_CN), including the JavaScript UI (script-translation JSON).
* Performance: Transient cache (5 min) for access checks; ETag/Last-Modified for browser cache invalidation.
* Fix: Same-day cutoff time was not working when the product also had a fixed start date configured. The absolute start date was applied after the cutoff check and silently overrode it, leaving today selectable past the cutoff time. Cutoff check now runs after all date overrides and correctly disables today in every configuration.
* Fix: Same-day cutoff time is now validated server-side at checkout. A customer who selected today's date before the cutoff and held the cart past it is now blocked at checkout.
* New: Congress can be switched active/inactive per congress (on top of the global on/off) — hide it everywhere without unassigning, e.g. to publish the info only later after purchase.
* New: The Vollstart Wallet shows a congress button on the ticket; it enables/disables on the next refresh based on the global switch, the per-congress active flag, the order status, and the access window (which now derives the event date from the ticket's product). Outside the window it shows a disabled "available from …" hint.
* Changed: Wallet API now returns a generic, extensible `actions` array (future content types reuse it) instead of the single `congress_url` field.
* Changed: Removed the redundant per-congress "Event start/end" fields from the congress editor — the event date comes from the WooCommerce product.

= 3.0.10 - 2026-05-18 =
* Fix: Same-day cutoff time was not working when the product also had a fixed start date configured. The absolute start date was applied after the cutoff check and silently overrode it, leaving today selectable past the cutoff time. Cutoff check now runs after all date overrides and correctly disables today in every configuration.
* Fix: Same-day cutoff time is now validated server-side at checkout. A customer who selected today's date before the cutoff and held the cart past it is now blocked at checkout.

= 3.0.9 - 2026-05-18 =
* New: Day-chooser products can now define a "Same-day cutoff time" (HH:MM) in the product's ticket settings. When the customer's local time is past that value, today's date is automatically disabled in the date picker — only tomorrow and future dates remain selectable. The field has no effect when "Offset days for start date" is already ≥ 1 (today would be excluded anyway).
* Fix: Same-day cutoff time was ineffective on products that also have a fixed start date (ticket_start_date) configured. The absolute start date was applied after the cutoff check and silently overrode it, leaving today selectable past the cutoff. The cutoff check now runs after all min-date overrides and correctly shifts the minimum to tomorrow whenever today would still be reachable.
* New: CVV-at-Scanner — a per-product opt-in second-factor for ticket redemption. Enable "Require security code at scanner" (`saso_eventtickets_require_cvv_at_scanner`) on any ticket product; a unique 4-character alphanumeric code (uppercase A–Z plus 2–9, no visually ambiguous O/0/I/1) is generated automatically at WC order-completion time and stored alongside the ticket. At the scanner, the ticket's public ID is shown immediately on QR scan but all identifying information (name, seat, billing details, product title) is withheld until the bearer reads the code from their ticket and enters it. An incorrect code counts as one strike; after 5 consecutive wrong attempts the ticket locks and the scanner shows a prominent locked-screen warning — the attendant must contact the organiser to reset via the "Reset CVV attempts" button in the admin code-edit modal. The default UI is a two-stage hand-over flow: first stage confirms the public ticket ID and prompts the organiser to hand the device to the attendee; second stage shows the masked code entry field with a show/hide toggle. An optional one-stage flow (global option `wcTicketScannerCVVOneStageFlow`, default off) skips the hand-over prompt for high-trust environments. Input masking is on by default and controlled globally via `wcTicketScannerCVVMaskInput` (default on). The anti-information-leak short-circuit response from REST endpoints exposes only `requires_cvv`, `attempts_remaining`, `locked`, and `public_ticket_id` — no product name, seat, billing, or order metadata is returned before a correct CVV is entered.
* New: Order-ticket QR codes (one QR for an entire order) now honor the per-product CVV requirement on a per-ticket-row basis. When an order QR is scanned and one or more of its tickets is from a CVV-protected product, the scanner UI renders a compact CVV input next to each protected row instead of revealing name/seat/order details for it, while non-protected rows in the same order continue to show full information. A "Confirm codes" button at the bottom submits all entered codes in one round-trip; rows with a correct CVV unlock and become fully redeemable. Wrong-CVV rows decrement the per-ticket attempt counter (same 5-strike lockout as single-ticket scans); attempts on one row do not affect other rows. Anti-information-leak: blocked rows expose only `requires_cvv`, `attempts_remaining`, `locked`, and `public_ticket_id`.
* New: CSV ticket export gains two new columns — `meta_cvv_attempts` (number of failed attempts so far) and `meta_cvv_locked` (boolean, 1 if the 5-strike limit was reached) — so organisers can audit CVV activity across all tickets without opening individual admin screens.

= 3.0.8 - 2026-05-11 =
* Fix: On variable products, the parent's "Request a value per ticket", "...mandatory" and the matching name-per-ticket checkboxes silently turned themselves back ON every time anything on the product was saved (e.g. flipping a variation's stock status). Root cause: each variation row submits an override `<select name="<key>[<i>]">` under the same root name as the parent's checkbox/input, so on a variable-product save `$_POST[<key>]` arrived as an array. The save handler treated "key is present in POST" as "checkbox is checked" and overwrote the parent meta with `yes` — which is also why the cart kept asking customers to fill in a value field even when, in the admin, the boxes looked unchecked. The handler now ignores array values for parent-level fields (`request_name/value_per_ticket(_mandatory|_label|_def)`, `ticket_start/end_date/time`, `ticket_amount_per_item`, and Premium's `expiration_days`). After updating, simply uncheck the affected boxes once and they will stay unchecked. No data migration is required.
* Fix: Fatal TypeError when adding products to cart from a wishlist (or any 3rd-party plugin that calls `WC_Cart::add_to_cart()` without supplying `$variation` as an array). The internal handler used a strict `array` type-hint and aborted the whole cart operation — it now accepts any input and normalizes defensively. Affects sites running WooCommerce Wishlists.
* Fix: Ticket configuration fields (date, dropdown, name-per-ticket, etc.) no longer appear on every variation of every variable product in the admin. They are now only rendered when the parent product is explicitly marked as a ticket — same UX rule that already applies to simple products. Catalogs with thousands of non-ticket variable products no longer have to opt out per variation.
* Fix: Cart and checkout no longer render ticket-specific input fields (name-per-ticket, value-per-ticket, daychooser, seat info) for products whose parent is not (or no longer) a ticket. The `is_ticket` flag on the parent product is now the single source of truth — stale variation/product meta from a previous configuration is ignored. Validation at checkout follows the same rule and no longer blocks orders for non-ticket products with leftover meta. Purchase-restriction codes are unaffected and continue to work on any product type.
* Fix: Cart and checkout input fields for the name-per-ticket, value-per-ticket and purchase-restriction features now use standard WooCommerce form-row markup (`<p class="form-row form-row-wide"><label>…</label><input class="input-text" />`) instead of a custom `<small>`-label wrapper. This lets the active theme's CSS apply normally so the fields look consistent with the rest of the cart/checkout form.

= 3.0.7 - 2026-05-05 =
* Fix: License-key modal no longer nags on every admin page load. Clicking "Later" now silences the prompt for 24 hours (per browser, via localStorage) instead of re-popping on the next click. Customers can still enter the key any time on the plugin's Options page — the field is rendered there.
* New: Eventado public-calendar teaser added to the "What's New" version-notices system on the plugin's settings page (the same release-announcement surface that already carries the Wallet card). Active for all users until "Dismiss" is clicked; dismissing pins it to the current plugin version, so it re-appears on the next plugin update.
* New: Authtoken audit on ticket redemption — when an external scanner team uses an authtoken (no WP login), the token's database id is now stored in the redeem record (`redeemed_via_authtoken_id`). Backend ticket detail view shows "Redeemed via authtoken: NAME (#ID)" alongside any WP-user redeem info; CSV export gains `meta_wc_ticket_redeemed_via_authtoken_id` + `_name` columns. The token name is resolved live with per-request caching, so a renamed token shows the current name everywhere — only the id is persisted.
* i18n: 13 Premium-side strings now ship with translations in all 11 languages (de_DE, de_CH, en, es_ES, fr_FR, hu_HU, it_IT, ja_JP, nl_NL, pt_BR, pt_PT, zh_CN). Strings cover the new Eventado options (publish toggle, per-product exclude, 18+ flag, sync notice, license-expiry banner) and a few Premium options that previously only existed as English source strings.
* i18n: Context-Wizard suggestion-card system gains a new card for the Eventado publishing option (Premium only). Replaces the temporary admin_notices banner from 1.6.8 — uses the existing dismiss-per-user flow, renders inline on the options page next to the Wallet suggestion.
* i18n: Premium plugin now uses the basic plugin's textdomain consistently — strings that lived under `event-tickets-with-woocommmerce-premium` (license-expiry messages) are migrated to `event-tickets-with-ticket-scanner`, so a single .mo file per language covers both plugins.

= 3.0.6 - 2026-05-04 =
* New: "First Activated" date in Support Info — shows when the plugin was first activated, included in the copyable support text. Marked as "(estimate)" for installs predating this version.
* Internal: First-activation timestamp is sent to the license server with the next license check (Premium plugin) for free-to-paid analytics.
* Improvement: Day chooser auto-jumps to the first month with available dates. If the current month has no free slots (all days excluded by weekday rules, blackout dates, or min-date), the picker now opens directly on the next month that has at least one selectable day — customers no longer see a frustrating all-grey calendar. Scans up to 24 months forward.

= 3.0.5 - 2026-04-24 =
* Fix: "Update available" badge stayed visible after auto-upgrade of the premium plugin — the `update_plugins` site transient was only cleared BEFORE the upgrade, not after. WordPress then kept the stale "update available" entry until the next WP-Cron (12h later). The transient is now cleared + re-checked after the upgrade completes, so the red badge disappears on the next page load.
* Improvement: License activation modal now locks the UI while the license check runs — "Activate" button and input field are disabled, a clear spinner with "Validating license — please wait…" replaces the small status text. Prevents multiple clicks and confusion during the 2–5s background check.

= 3.0.4 - 2026-04-23 =
* Fix: License activation flow — after entering a license key, the "Starter plugin installed" and "subscription expired" banners now disappear immediately (via JS fade + 60s server-side suppression) instead of staying visible until the next page load. Page now always reloads after a serial is saved to reflect the new plugin state.
* Fix: "Subscription expired" banner no longer shown when no license key is configured (was confusing new customers who had just installed the starter plugin).
* Fix: PHP warning "Undefined array key SCRIPT_NAME" when plugin runs in CLI or WP-Cron context — index.php:92 and :578 now use null-safe access. Same class of bug as the REQUEST_METHOD fix in 3.0.3 but for SCRIPT_NAME.
* Fix: Hardened `SASO_EVENTTICKETS::issetRPara()` against missing REQUEST_METHOD in CLI/cron context.

= 3.0.3 - 2026-04-20 =
* New: Auto-upgrade premium plugin after valid license key is saved — no more manual "Update" click needed. Customers who install the starter plugin and enter their license now get the real premium installed automatically in the background.
* Fix: PHP 8.2+ fatal error "Call to undefined function trigger_deprecation()" — Twig Composer autoloader conflict when another plugin bundles Twig. Added polyfill before autoload.
* Fix: PHP warning "Undefined array key REQUEST_METHOD" when plugin runs in CLI or WP-Cron context
* Fix: Day chooser label not visible on product and shop pages — empty string prevented DB lookup and rendering
* Fix: Day chooser showed wrong date in cart after re-adding same product — stale session data was not cleaned up on cart item removal. Added session_unset_value() cleanup.
* Fix: Day chooser dates grew unbounded on WC cart merge — old dates were appended instead of correctly filling only new ticket positions
* Fix: Day chooser on shop/archive page now works with WooCommerce Blocks — click interceptor appends date as GET parameter since WC Blocks no longer fires jQuery adding_to_cart event
* Fix: Day chooser input now blocks keyboard typing and paste via JS — users must pick from datepicker. Server-side validation also checks excluded weekdays and specific dates (Premium).
* Improvement: Datepicker wrapper has CSS class `saso-eventtickets-datepicker` and `data-product-id` for custom styling
* New: Variable fields (name input + value dropdown) now configurable per WooCommerce variation — override enable, label, mandatory, and dropdown values per variation with automatic fallback to parent product settings
* New: Attendance tab — "Sold Tickets" calendar view showing booked dates across all date picker products with product filter, month navigation, drill-down to individual tickets, CSV export, and auto-refresh (10s/30s/1min/5min) for live dashboard use
* New: Error logs CSV export in Support Info
* Improvement: Support Info layout — two-column grid for cards, URLs and Libraries side by side
* Improvement: Sold Tickets Calendar button visible on all ticket products (disabled with hint for non-datepicker products)
* Improvement: Print List table column widths fixed (# 1cm, Order/Status 2cm)
* New: "More Plugins by Vollstart" submenu page — discover other free plugins from the same team

= 3.0.2 - 2026-04-12 =
* Fix: Old premium (< 1.5.0) compatibility — ReflectionClass-based method check BEFORE instantiation prevents "ghost hook" crashes. The old premium constructor registers 25+ WordPress hooks on $this; if the class was instantiated and then discarded, WordPress kept the callbacks alive in memory and fired them later, crashing the site on methods removed in the WC manager refactor. Now the compatibility check happens without ever running the constructor.
* Fix: DB migration for redeemed codes no longer loads all rows into PHP memory — replaced SELECT+loop with a single SQL UPDATE, preventing memory exhaustion on large databases (1M+ tickets)
* New: Vollstart Wallet integration — customers can add tickets to the Vollstart Wallet app (wallet.vollstart.com) to collect tickets from multiple shops in one place. Enable in plugin settings under "Digital Wallets". Adds "Add to Vollstart Wallet" button on ticket detail page and in order emails. Includes REST API endpoint for the wallet app.
* New: Wallet option in Setup Wizard — all 4 presets (Event, Day Pass, Membership, Voucher) now include the Vollstart Wallet toggle
* New: Context suggestion for existing installations — prompts to enable Vollstart Wallet when tickets exist
* New: REST API warning in wallet option when WordPress REST API is disabled
* New: Version notice system — shows "What's New" messages after plugin updates, dismissible per version
* New: Wallet test link in admin ticket detail view — quickly import a ticket to Vollstart Wallet for testing
* Fix: Hard-throttled periodic license check via site transient — prevents runaway license requests when admin pages are hit rapidly by bots, monitoring tools, or other plugins
* Improvement: Updated all translations — 11 new wallet strings added to all 11 languages

= 3.0.1 - 2026-04-07 =
* Improvement: Updated all translations — regenerated POT from source, added 188 new strings, all 11 languages at 100% (de, es, fr, hu, it, ja, nl, pt_BR, pt_PT, zh_CN)
* Improvement: Premium plugin labels (Ticket Template, Excluded Days, License Key etc.) now included in translations

= 3.0.0 - 2026-03-31 =
* Fix: Admin CSS was cached by Cloudflare/browsers after plugin updates — added version-based cache buster to dynamically loaded stylesheet
* Fix: Scoped global CSS button selectors to plugin container — no longer affects WP admin sidebar
* Fix: Backend CSS now loaded via wp_enqueue_style instead of JS injection (prevents layout shift)
* Fix: Removed duplicate Settings submenu entry (top-level menu only)
* New: QR code scanner on the validator form — users can scan QR codes with their device camera instead of typing codes manually (enable in plugin settings)
* New: License key prompt dialog on settings page instead of browser alert — with direct link to options page
* Fix: Ticket table button column no longer forces minimum width (cleaner layout on small screens)

= 2.9.9 - 2026-03-23 =
* Improvement: License check resilience — brief server outages no longer disable premium features; raised failure threshold from 5 to 10, extended staleness window from 10 to 21 days, and server errors (5xx, empty body) now count as transient failures instead of genuine rejections
* Fix: "Check License" button now resets failure counter before server check — previously, accumulated failures from a server outage could prevent recovery even after the server was back online
* Improvement: Modern admin UI redesign — card-based layout with consistent spacing, branded purple accent color, professional footer grid, improved DataTable styling, smooth loading animations, and responsive design
* New: Plugin header now includes Requires at least, Tested up to, and Requires PHP — displayed in support info area for easier troubleshooting
* Fix: Corrected 10 English typos in source strings that caused translation mismatches (e.g. successfull, duplicat, choosen)
* Fix: No more flash of unstyled content when loading admin page
* Improvement: Regenerated all German backend translations — from 162 to 451 strings (full coverage)
* New: FOMO banner for expired premium subscriptions — shows new features released since expiration with dismissible 30-day reminder
* Fix: Added missing License header to plugin file to satisfy WordPress.org plugin check

= 2.9.8 - 2026-03-11 =
* Fix: TypeError in WooCommerce email preview and order emails — removed strict type hints from all WooCommerce hook callbacks to prevent crashes with different WC versions

= 2.9.7 - 2026-03-11 =
* Fix: Options migration safety net — premium options (e.g. PDF ticket attachment) are now preserved even if the premium plugin was inactive during the database migration from wp_options to the custom options table

= 2.9.6 - 2026-03-10 =
* New: Daily Redemption Summary — view redeemed tickets across all products for any date range (Premium)
* New: No-Show count in Attendance view showing unredeemed tickets per event (Premium)
* New: Drill-down from Attendance rows to individual ticket codes with order links (Premium)
* New: Export Attendance data as CSV (Premium)
* Improvement: Seating CSV export/import now includes visual designer data — position, rotation, shape, and color survive roundtrip (Premium) (#209)
* Fix: Seating CSV export appended JSON artifact at end of file — missing exit after CSV output (#209)
* New: Calendar view and printable ticket list on product edit page for daychooser products (#191)
* Performance: Lazy-load single options via getOption() instead of bulk-loading all options
* New: License Server Connectivity Check — diagnostic button in Support area tests if vollstart.com license/update server is reachable. Shows connection status, response time, and detailed error messages. Helps diagnose Premium update issues caused by firewalls, DNS problems, or network restrictions.
* Improvement: Subscription expiration warnings now distinguish between license types — lifetime/onetime licenses show no warning (continue working with Basic < 2.8.0), monthly subscriptions warn about payment processing, yearly subscriptions warn about expiration.
* Improvement: Renamed "Serial Key" to "License Key" in all user-facing strings for clarity
* Improvement: Complete translations for all 11 languages (DE, ES, FR, HU, IT, JA, NL, PT_BR, PT_PT, ZH_CN, DE_CH) — 100% coverage

= 2.9.5 - 2026-03-03 =
* Fix: Premium serial key displayed as 0 after options migration — premium features appeared lost. Options added late during initialization (e.g. by the premium plugin) are now loaded correctly from the custom table.

= 2.9.4 - 2026-03-03 =
* Performance: Plugin options migrated from individual wp_options rows to a dedicated custom table — all settings now load in a single query instead of 150+ separate queries (#73)
* New: Options change history — tracks who changed which setting, when, with old and new values. Revert button to restore previous values. Keeps last 10 entries per option, older entries cleaned up automatically. Available in Options > Change History tab (#73)
* New: Context-Wizards — smart suggestions on the options page based on your current configuration. Detects related settings and offers to enable them with one click. Covers email attachments, scanner presets, ticket display, and security settings. Dismissals are per-user (#232)
* New: Export and import seating plan seats via CSV for backup, external editing, or transfer between plans (Premium) (#209)
* Fix: Old premium plugin (< 1.6.0 or without version constant) caused crash instead of being gracefully blocked
* Fix: Options migration is now abort-safe — if interrupted, it resumes on next page load instead of silently losing settings. Existing values are updated correctly on re-run.
* Fix: Database upgrade jobs now run before saving the new DB version, preventing incomplete upgrades from being marked as finished
* Fix: Premium or third-party upgrade hooks that throw exceptions are now caught and logged instead of causing an infinite crash loop
* Security: Activate global ticket counter brake to prevent free limit bypass via delete-and-recreate

= 2.9.3 - 2026-03-02 =
* New: "Check License" button — recheck premium license status on demand from Options page (next to serial field) and Support Info page. Shows status, last check, expiration, failure count.
* Improvement: Saving a serial key now immediately checks the license and shows the result inline. On success, the page reloads automatically so premium features are available without manual refresh.
* Improvement: "Check License Now" button bypasses the 7-day server cache to always get a fresh response
* Fix: Dismiss button for ticket format warnings did not work — two bugs: nonce parameter name mismatch, and wp_redirect() called during admin_notices (after output started). Dismiss handler now runs on admin_init.
* Fix: JavaScript error "cannot call methods on dialog prior to initialization" — closeDialog() tried to destroy all dialog elements on page instead of only the target dialog
* Fix: backend.js could be cached by browser across updates — jQuery.getScript() bypassed WordPress cache busting. Now uses file modification time as additional cache-buster parameter.
* New: Setup Wizard — multi-step dialog guides new users through use-case selection (Event tickets, Day passes, Memberships, Vouchers) and configures optimal settings automatically. Covers redemption rules, scanner behavior, email delivery (ICS, date, order view), and order processing. Premium users also get PDF attachment settings. Re-launchable via "Start Wizard" button.
* New: Premium Wizard — one-time dialog when premium is activated, offers to enable recommended premium defaults (PDF email attachment, merge into one PDF). Re-launchable via "Premium Wizard" button (only visible with premium). (#233)
* New: Export/Import options — backup and restore all plugin settings as JSON file
* New: "Max redeems per day" option per product — limit how many times a multi-redeem ticket can be redeemed on a single day (0 = unlimited, only total max applies)
* Improvement: "First Steps" onboarding box upgraded to interactive card with progress bar, auto-detection of completed steps, and action buttons
* Improvement: Code generation now uses date-based prefix (encoded as 5 letters) to partition address space — virtually eliminates collisions even with short code formats
* Improvement: Increased code generation retry limit from 100 to 500 attempts
* Improvement: Ticket detail view now shows WooCommerce order status, billing email, product name, and variation attributes
* Improvement: Support Info — options list is now hidden behind a button click to reduce page load clutter
* Improvement: Bulk action dropdown now shows a message when no tickets are selected
* Improvement: AJAX calls now properly handle network-level errors (timeout, connection lost)
* Improvement: Cart input fields (name per ticket, restriction code) now auto-save on Enter key (#234)
* New: Auto-update dialog — after entering a serial key with an outdated premium plugin, automatically checks for updates and offers to install them. Shows release notes for users without an active subscription.
* Fix: Value-per-ticket dropdown in cart never saved — selector targeted wrong element type and attribute (#234)
* Fix: Options in-memory cache corruption in _setOptionValuesByKey() — variable name collision caused stale/incorrect values within the same request
* Fix: Restriction code input in cart crashed on PHP 8.x due to wrong constant name case (META_KEY_CODELIST_RESTRICTION_order_item → _ORDER_ITEM)
* Fix: False "Ticket format exhausted" warning when free version ticket limit (32) was reached — #208 exception was incorrectly triggering format warning on first attempt
* Fix: clearFormatWarning() never actually cleared warnings — editList() was called with wrong signature, exception silently caught
* Fix: "Edit list" link in format warning notice and email pointed to non-existent admin page
* Fix: Import options failed silently due to WordPress wp_magic_quotes escaping JSON — now handled via stripslashes
* Fix: Product meta save could trigger PHP warning for undefined array key due to operator precedence bug
* Fix: Admin ping timeout (e.g. when browser tab is frozen) no longer shows repeated error dialogs
* Fix: Typo in displayFirstStepsHelp option description ("activet" → "activated")

= 2.9.2 - 2026-02-23 =
* Fix: Format warning data (attempts, last_email) was never persisted — editList() called with wrong signature and would auto-clear warnings

= 2.9.1 - 2026-02-23 =
* Fix: Crash during checkout when format warning check runs (undefined method _json_encode_with_error_handling)

= 2.9.0 - 2026-02-23 =
* Fix: Crash on PHP 8.x when plugin loading order puts basic before premium (e.g. after auto-update) — now defers premium loading via plugins_loaded hook
* Fix: Crash in get_expiration() on PHP 8.x when license data contains invalid JSON
* New: Old premium versions (< 1.6.0) are now gracefully blocked instead of causing fatal errors — site runs as free with admin warning
* New: Serial key field shown in basic plugin settings when old premium is detected, so users can still manage their license
* Improvement: License check now properly throttles retries when serial key is invalid, preventing excessive server calls
* Improvement: Changing the serial key now immediately triggers a fresh license check instead of waiting for the next cycle
* Fix: Invalid serial key no longer causes license check on every page load
* Fix: All non-German translations (NL, ES, IT, PT_BR, PT_PT, HU, JA, ZH_CN) replaced with proper localized translations — previously contained German text
* Fix: Renewal and reactivation links in admin notices pointed to wrong URL
* Fix: Ticket redemption blocking ("deny redeem before event start") was off by the GMT offset for non-UTC timezones

= 2.8.10 - 2026-02-18 =
* Fix: Premium license recovery — license revalidation now runs even when local license data is stale, preventing permanent premium lockout
* Fix: Stale "notvalid" flag is now cleared when the license server confirms a valid subscription

= 2.8.8 - 2026-02-18 =
* Fix: Option "No login required to access scanner" (wcTicketScannerAllowedRoles) now works correctly again for non-authenticated users
* Fix: PHP 8.4 compatibility — explicit nullable type hints for deprecated implicit nullable parameters
* Improved: Updated translations for all 11 languages (DE, ES, FR, HU, IT, JA, NL, PT-BR, PT-PT, ZH) with 16 new strings from v2.8.6 and v2.8.7 (PWA, scanner options, format warnings)
* New: Ticket scanner shows timestamp of last scan for better tracking
* New: Admin notice when PHP version is below the required 8.1
* Improved: Corrected library version display in system info (FPDF 1.85, Twig PHP requirement note)

= 2.8.7 - 2026-02-16 =
* New: PWA (Progressive Web App) support — install the ticket scanner as a home screen app on mobile devices (optional, enable in settings)
* New: Fullscreen mode button for the ticket scanner — immersive scanning without browser chrome
* New: Haptic feedback (vibration) on scan result — different patterns for success and failure
* New: Customizable scanner theme color — affects PWA status bar, loading spinner, and scanner buttons
* New: Expanded FAQ with 7 categories and 21 questions covering scanner setup, PDF design, WooCommerce, webhooks, and more
* Improved: Scanner HTML now uses proper DOCTYPE, charset, and viewport meta tags
* Improved: Scanner assets (JS libraries, CSS, images) cached by service worker for faster loading
* Security: Hardened premium license revalidation with independent subscription verification
* Security: Added HMAC checksum protection against license data tampering in database
* Fix: Resolved infinite recursion during plugin initialization when premium plugin is active
* Fix: Translation loading no longer triggers WordPress 6.7+ "too early" notice
* Fix: License checksum verification now stable across CLI and web contexts
* Fix: License server response now correctly overrides local data (fixed array_merge order)
* Fix: API connection failures are now tracked; premium deactivates after 5 consecutive failures
* Fix: Admin page loads now trigger license check if last check was >24h ago (cron fallback)
* Fix: License key input field now always visible when premium plugin is installed

= 2.8.6 - 2026-02-11 =
* New: Full bleed mode option for ticket designer — removes ALL margins for edge-to-edge background images.
* New: Separate full bleed option for test ticket designer.
* New: Ticket background color option — set a custom background color for PDF tickets, badges, and flyers.
* New: Ticket number format exhaustion warning — alerts admin when ticket format is running out of combinations (counter-based detection).
* New: Automatic email notifications when ticket format reaches 50% capacity or is exhausted (once per day).
* New: Admin notice with dismiss button for format warnings, includes direct link to edit ticket list.
* New: Format warning auto-clears when ticket list is manually saved (user likely adjusted formatter).
* Security: Fixed unauthenticated REST endpoint that exposed admin dispatcher (CVSS 9 — reported by Patchstack).
* Security: REST permission callback now requires authentication (login or authtoken) by default.
* Security: Added capability guards for sensitive admin actions (defense in depth).
* Security: Removed wp_rest nonce fallback from admin action handler.

= 2.8.5 - 2026-01-26 =
* Fix: Fatal error on non-premium installations when SASO_EVENTTICKETS_PREMIUM_PLUGIN_VERSION constant is undefined.
* Improved: VollstartValidatorDebug URL parameter now passed through to AJAX requests for easier debugging.

= 2.8.4 - 2026-01-26 =
* New: Seating plan visualization in ticket scanner — view venue map with highlighted seat position.
* New: Option to enable/disable seating plan button in scanner.
* New: Option to enable/disable venue image button in scanner.
* Improved: Seating plan data loaded on demand (lazy loading) for better scanner performance.
* New: Shortcode parameter `order_id` for [sasoEventTicketsValidator_code] to display tickets from a specific order.
* New: Shortcode [sasoEventTicketsValidator_ticket_detail] to display ticket detail view on any page.
* Fix: Date localization now correctly displays translated month/day names while maintaining correct timezone handling.
* Fix: Fatal error in removeUsedInformationFromCode() when changing order status.

= 2.8.3 - 2026-01-22 =
* New: Seating Designer — Element rotation (0-359°) with preset buttons.
* New: Seating Designer — Group rotation (rotate multiple selected elements around their common center).
* New: Seating Designer — Bulk property editing when multiple elements are selected.
* New: Seating Designer — Duplicate selection for groups (copy multiple elements at once).
* New: Seating Designer — Enhanced visual feedback for multi-selected elements.
* Improved: Seating API now uses unified bulk operations for better performance.
* Fix: PDF QR code compatibility with third-party FPDI libraries.
* Fix: Event times displayed incorrectly due to double timezone conversion in ticket templates.

= 2.8.2 - 2026-01-21 =
* New: Clone/duplicate seating plans with all seats and layout.
* New: Batch operations for seats (activate, deactivate, delete multiple seats at once).
* New: Premium subscription expiration check with admin warnings and grace period.
* New: Lifetime license support.
* New: Delete All Tickets button on ticket list with double confirmation.
* New: Shortcode parameter download_all_pdf for downloading all user tickets as one PDF.
* New: Safety check when deleting ticket lists — warns if list is still assigned to products.
* Fix: Restored deprecated methods for backward compatibility with older premium plugin versions.

= 2.8.1 - 2026-01-20 =
* Fix: PHP 8.4 compatibility — explicit nullable type for REST API parameter.

= 2.8.0 - 2026-01-20 =
* New: Interactive seating plan designer with drag & drop editor for creating venue layouts.
* New: Let customers choose their seats during checkout with visual seat selection.
* New: Seat information displayed on PDF tickets, in emails, and in the ticket scanner.
* New: Automatic seat blocking during checkout with configurable timeout.
* New: Seat release on order cancel or refund.
* New: Seating plan support on shop/archive pages.
* New: Voice output for the ticket scanner.
* Improved: Security checks for admin area access.
* Improved: Public ticket number now displayed in emails instead of internal ticket number.
* Fix: Ticket list description slashes.
* Fix: Customer search in admin backend.

= 2.7.10 - 2025-10-14 =
* Fix for the created time within the admin area on the tables (tickets, ticket list, auths).
* Fix for polygon plugin that is overwritting a WPML function and prevents to get the correct porduct id.
* Adjust the order of the tickets table to use the created date as default.
* Fix for date picker with plugins, that are messing up the date information on the cart item.

= 2.7.9 - 2025-09-30 =
* Add an update checkout to reflect the changed input values if you use a single page for cart and checkout.
* Add First Steps box to the admin area for new users.
* Add link to the BETA chat bot for faster help - using ChatGPT for now.
* Added a warning, if you try to add ticket numbers without having a ticket list.
* Add info if the datatable for the ticket list is empty.
* Add info if the datatable for the tickets is empty.
* Add release notes as link within the support area.
* New option to allow subscription using the same ticket number as the parent order - wcassignmentExtendTicketWithSubscription.
* Fix for ticket scanner url if option wcTicketCompatibilityModeURLPath is used.
* Add ticket scanner URL with public ticket number to the ticket details in the admin area.
* Adjust date and time output at the admin area to use your date and time format.

= 2.7.8 - 2025-09-15 =
* Fix the switched column value of redeemed and redeemed.
* Fix the missing date on the ticket.

= 2.7.7 - 2025-09-08 =
* Add fix for WPML products for the order email.
* Fix for display chosen date from the date picker to the WCPDF plugin if used.
* Fix for format display of chosen date on the email.
* Fix for format display of chosen date on the thank you page.
* Add more support for WPML.
* Add new label for the date picker. If the date is in the past then the value of option wcTicketLabelCartForDaychooserPassedDate will be shown.
* Fix for cleaning up the session if an product is removed from the cart.
* Add date picker to the shop page for day chooser products.
* Add date picker to the product page for day chooser products.
* Label wcTicketLabelPDFDownloadHeading can be excluded from rendering by entering an empty space.

= 2.7.6 - 2025-08-22 =
* Add name and language indicator to the font chooser option wcTicketPDFFontFamily
* Listed more libraries in the support area
* Removed the list with all available options from the support area
* New option to set the order status if the ticket is viewed or downloaded. Warning, this is tricky, if you have no clue for what it could be used, please do not use it. Option: ticketScannerSetOrderStatusAfterTicketView.
* Fix display order ticket paid date for non paid tickets.
* Adopt ticket scanner to process also prefix "order-" as an order ticket number - fix bug before premum version 1.5.5.

= 2.7.5 - 2025-07-09 =
* Add check of the user input for the date picker. If the start and end date is set on the product, then the validation will make sure, the date is entered and also within the date range.
* New option to prevent downloads of tickets (secured downloads), badges and ICS files if the user is not logged in. To use this, activate wcTicketAllowOnlyLoggedinToDownload.
* New option if you want to redirect not logged in users during the secured download - wcTicketAllowOnlyLoggedinToDownloadRedirectURL.

= 2.7.4 - 2025-07-01 =
* Fix background image for ticket badges.

= 2.7.3 - 2025-06-24 =
* Fix for missing parent product id with wpml within the tickets
* Added languages for ticket scanner (ch_CN, es_ES, fr_FR, it_IT, ja_JP, nl_NL. pt_BR, pt_PT)

= 2.7.2 - 2025-06-17 =
* Fix qr content on ticket badge

= 2.7.1 - 2025-06-12 =
* Fix ticket scanner - it was prepared by accident to have a bit of code that is new approach.

= 2.7.0 - 2025-06-11 =
* Fix removing the ticket numbers from the order item, even if the tickets are already deleted.
* Changed the premium license link.
* Fix wrong QR code on QR code image and PDF if you use your own qr code content with option qrOwnQRContent.
* Fix wrong QR code on ticket badge if you use your own qr code content with option qrOwnQRContent.

= 2.6.11 - 2025-05-28 =
* Fix PDF ob_clean notice.
* Fix wrong version number.
* Fix cart (datepicker, text-value, option-value) value saving within the cart view and checkout.
* Fix update all dates on the cart view and checkout.

= 2.6.10 - 2025-05-26 =
* Add shortcode to display all options/features.
* Added ticket title and sub title (variation name) above the buttons for the distract free view of the scanned ticket.
* Display last redeem operation with the redeem information on the ticket scanner.
* Add redeem button to the top for fast redeem operation after the ticket is retrieved on the ticket scanner.
* New option to preset the ticket scanner to display the short description in distract free mode - ticketScannerHideTicketInformationShowShortDesc
* Bug fix for missing orders if the order will be checked for "is-paid"

= 2.6.9 = 2025-05-19 =
* Fix date picker saving value at cart.
* Reinit the date picker fields if the cart was updated.

= 2.6.8 - 2025-05-13 =
* Fix issue with variable products on the order view.

= 2.6.7 - 2025-05-13 =
* Add is_daychooser and day_per_ticket to the export. You have the meta information now direct as a column: meta_wc_ticket_is_daychooser, meta_wc_ticket_day_per_ticket.
* Add new filter for ticket numbers in the admin to search for a chosen date on the tickets. Search value is DAYPERTICKET:YYYY-MM-DD. You can also search for YYYY-MM or just YYYY.
* You can now add and & to the search within the ticket admin to search for more than one filter. But limited to filters and one normal search. E.g. PRODUCTID:123 & ORDERID:123 & ticketnumber.
* You can download the ticket badges from within the order now

= 2.6.6 - 2025-05-06 =
* Added more help videos to the options

= 2.6.5 - 2025-05-05 =
* Added list of third party libraries to the support information area.
* Ticket scanner has a new option to use the old QR code scanner library for compatibility mode in case your iphone is not working as expected.
* Admin area is refreshing the security code (nonce) automatically if open.
* Add an newline to put the date on the next line in the order items table.
* Thank you page uses now the new WooCommerce hook.
* Added font for PDF Roboto and Newsreader to support more languages.

= 2.6.4 - 2025-04-24 =
* Basic WPML plugin support added.
* Optimized the plugin speed a little bit.

= 2.6.3 - 2025-04-16=
* Datatables in the admin made width=100%.
* Add checks for used 3rd party php classes, so that they will not be re-added to php - what could cause conflicts.
* Display customer name is now using $order->get_formatted_billing_full_name.

= 2.6.2 - 2025-04-07 =
* Two columns added to the export: is_daychooser and day_per_ticket.
* Preparation to display the redeemed and not redeemed tickets at the ticket scanner - with premium 1.5.2 available.
* Changing title of the admin area from Event Tickets with Woocommerce to Event Tickets with Ticket Scanner
* Fixed the default value for Date2Text Javascript function on the ticket.
* Ticket scanner is now checking at least every 4 minutes for a new nonce security token, to prevent access error message.
* Fix for the date chooser - it will prevent allowing to choose a date before today.

= 2.6.1 - 2025-03-18 =
* Bug fix new check of the option value is active

= 2.6.0 - 2025-03-17 =
* Bug fix for unchecking of product checkboxes in the event tickets tab
* New shortcode [sasoEventTicketsValidator_eventsview]. Add event calendar view for events with an start date. Missing end date will be treated like same day.
* Option wcassignmentDoNotPutOnEmail re-added :)
* Option wcassignmentDoNotPutOnPDF re-added :)
* Small optimizations on options call and find products to make them private after expired
* Format for date and time is also passed to the outputs
* Ticket scanner is showing now always the variant name at the top - even if the option is deactivated. For the ticket view and PDF it is still the same.
* Ticket scanner text input field for hardware qr code scanner accepts also "'" as divider of the public ticket number.

= 2.5.9 - 2025-02-21 =
* Bug fix unused action that causes woocommerce to crash

= 2.5.8 - 2025-02-20 =
* Added support for Woocommerce high performance order storage (HPOS) to display the meta boxes on the order and product.
* Bugfix for option displayAdminAreaColumnConfirmedCount. The list was not displayed if you had new tickets without an order to it.
* Added support for premium feature multi ticket templates available with prem version 1.5.0

= 2.5.7 - 2025-02-17 =
* Option wcassignmentDoNotPutOnEmail is removed - makes no sense and was not used.
* Option wcassignmentDoNotPutOnPDF is removed - makes no sense and was not used.
* Replaced $_REQUEST with the $_POST or $_GET approach, in case the super globals are off.
* Option wcTicketCompatibilityUseURL to use the file location of an image for the PDF instead of the URL - some installations have issues with the firewall.
* You can now enter any public ticket number to test the ticket template design. So you can choose from the dropdown or enter the number in the textfield next to the dropdown.
* Date picker of the same cart item will update all empty date picker to the same date, to speed up entering the values.
* Add more error handling, if the order do not exists or is not assigned while reading the customer company name for the ticket list in the admin.

= 2.5.6 - 2025-02-03 =
* New column Billing Company for the ticket list within the plugin admin - option displayAdminAreaColumnBillingCompany
* Key check for error log, to prevent errors if the line is not available
* Support for daychooser to exclude specific dates, that were added with premium 1.4.4
* Fix the ugly display of the ticket information within the order for public ticket number and choosen days.
* Changed the default template to handle the string in product.get_attributes better
* Added new TWIG tests. object, array, string and numeric. You can use it like: {% if item is array %}.
* Ticket scanner is now checking the REST API result and parsing it to json in case your server sends the wrong content type.
* Add header_remove() before sending the PDF to prevent issues from other plugins.

= 2.5.5 - 2025-01-22 =
* Fix test template preview - using again the test template
* Adjusted default ticket template to display the variant names with a space

= 2.5.4 - 2025-01-20 =
* Some labels and description improvements on the option page
* Fixed output on the product detail to display the start and end date correctly
* Changed code to display the correct variant product date
* Added support for the day chooser on variable products
* Added more NONCE check to prevent CRFS issues
* Small fix for the event flyer layout

= 2.5.3 - 2025-01-14 =
* Add error handling if the product is missing during generation of the ticket PDF
* Improved the error messaging on the cart view for the day picker tickets
* New option to add input field, dropdown and date picker to the checkout page - wcTicketShowInputFieldsOnCheckoutPage
* Bug fix for the ticket scanner. The redeem until message is only shown if the date is also set.
* Removed the prefix OPTIONS from the option - effects only display options name
* Bug fix for badge PDF - the public ticket number is displayed correctly again

= 2.5.2 - 2025-01-03 =
* Bug fix for "expired" warning for tickets on the ticket scanner

= 2.5.1 - 2024-12-25 =
* Bug fix for attaching ICS file to the order mail
* Bug fix display woocommerce order date on PDF and ticket

= 2.5.0 - 2024-12-23 =
* Tested with PHP 8.3 - DO NOT RELY ON PHP8 yet if possible. To use URLs in your template for the PDF make sure you have php8.3-curl and php8.3-imagick installed.
* Add new feature Date Picker for tickets. You can now setup the product to have a start and end time and the day can be chosen by your customer at the cart view.
* Exclude days for the date picker on product level
* New label for the error message with the date picker - wcTicketLabelCartForDaychooser and wcTicketLabelCartForDaychooserInvalidDate
* Displaying the value per ticket, name per ticket and day chosen per ticket to the order email.
* Fix for label of the value chosen by the dropdown within the cart
* Adjusted the default ticket template to reflect the day choosen for date picker tickets.

= 2.4.4 - 2024-12-02 =
* Added french language file for the backend. Big thanks to Maxime.
* Remove HTML from the description of the auth token
* Remove HTML from the product id list of the auth token

= 2.4.3 - 2024-11-12 =
* On the badge the event date will not be shown if the value at the event is not set. {TICKET.PRODUCT.XYZ}. Properties are ticket_start_date, ticket_end_date, ticket_start_time and ticket_end_time
* New option to remove tickets from partially refunded order items - wcassignmentOrderItemRefund
* In order view, the public ticket ids are listed more easier to read
* Bug fix for additional ticket numbers to an order item. Now the values are corrected and the amount of tickets is correct.
* Bug fix for delete order - the tickets are removed now

= 2.4.2 - 2024-10-29 =
* Fix wrong error message, if you have no values selected in option adminAreaAllowedRoles.
* Fix default ordering over the created date if you display additional columns.
* Preventing and removing "/" from the ticket number formatter prefix value, because this can cause issues on some installations due to the database search. The "/" will be replaced by "-".
* Redeemable from info at the ticket scanner only displayed if the option wcTicketDontAllowRedeemTicketBeforeStart is activated.
* Ticket scanner is not rescanning the same ticket for 10 seconds - this prevents double redeem operation in fast mode.
* Removed most of the time calculation at the ticket scanner and using calculated times from the server
* New label for the status "Event ended already" - wcTicketTransTicketNotValidToLateEndEvent
* Default label value changed from "Redeemed at:" to "Last Redeemed:" - wcTicketTransRedeemDate
* Fix of some misleading redeem messages. It is now more clear, if the ticket expired, the event did not start yet and it is too late to redeem the ticket.

= 2.4.1 - 2024-10-21 =
* Rework the whole date calculation - again. I hope this time for the last time - tested in Manila and Zurich.
* New option to display server time and local time to the ticket scanner - option ticketScannerDisplayTimes.
* Optimize JS file including and added loading the translation to the order detail script.
* Added the functionality to have the order detail view translated.
* New column "confirmed count" added to the admin area - option displayAdminAreaColumnConfirmedCount to show it.
* New default values for the ticket number formatter if not set at all - 21 letter, use also numbers and delimiter with "-" after 7 letters - this makes sure you have enough ticket numbers for the future.
* New default value for option allowOnlySepcificRoleAccessToAdmin - it was set to false and allowed everyone with access to the backend access to the ticket admin.

= 2.4.0 - 2024-09-25 =
* New option for the QR code. You can now add a padding, to separate the QR code image from a background on your PDF - qrTicketPDFPadding
* New ticket scanner library - if you want to use the old scanner, then you can add the URL parameter &useoldticketscanner=1 to the ticket scanner URL
* Increase the speed of the old ticket scanner - just in case
* Moved the video help link to the option title and more helper videos added

= 2.3.12 - 2024-09-17 =
* Ajusted the Javascript variable for the cart to prevent naming collisions with other plugins
* Add a second confirmation question before you can empty the data of a table (tickets, ticket lists and error logs)
* Add a new function to TWIG - stripslahes - and used it on the default templates
* Inject jQuery to the order ticket view, in case it is not already with your theme loaded
* Adjust TWIG default template to check if the variant item is a string before printing it on the ticket
* The user redirect settings (including the URL on the list level) is now also executed with the self-redeem operation - I know, this is more than confusing. Sorry. I did not realize there was already a user redirect, when I was implementing the ticket redirect. Now you have two features for the same. The ticket list URL is only executed if the option userJSRedirectActiv is active.

= 2.3.11 - 2024-08-28 =
* Fix Javascript for the cart view to update the ticket text and value information from the customer
* Added new filter and action for the ticket output function
* Using the option date format to display the date values within the admin area data table column
* URL fix for PDF and badge download with in the emails, so that the ? is not added twice

= 2.3.10 - 2024-08-14 =
* Fix max redeem amount display after the redeem operation within the admin backend
* Add ACF support for the TWIG editor - you can use get_field to retrieve ACF field values
* Changed the default value for option wcTicketPDFStripHTML to remove unsupported HTML - it caused too many issues with new users
* Adopt the way the file location of the images for PDFs are adjusted. It will now use the URL as fallback if the file location cannot be accessed
* Fix ticket display view for the reload option
* Fix the expiration message on the ticket detail view
* Fix expiration check on the redeem operation and ticket scanner

= 2.3.9 - 2024-07-31 =
* Adjustment of the twig ticket templates - not using the date check but a new ticket property "is_event_over"
* Add new ticket property for twig editor to provide the premium value for expiration "is_expired"
* Bug fix for the redeem time check on the ticket scanner - I know again, and I am very sorry
* Added check for user redeem operation for event already ended option
* Bug fix for the redeem button on the ticket view for your customer. It will be not shown after the event ended
* Using now the woocommerce date format to display the event date and time on the product view
* Added the check for the redeem button on the ticket detail view, so that it cannot be self-redeemed before the start and its offset - if activated
* Added new properties to the ticket variable for the twig template editor
* Added hidden option for the ticket scanner to display the times from the server and product. Attache to the URL the parameter "displaytime" if needed
* Small fix for the auth name display - removing HTML tags from the name
* Extended the shortcode for my codes. You can now add the shortcode with parameter, to get the objects as json. Then you can use own Javascript code to display the values. More about it at the bottom of the admin page.

= 2.3.8 - 2024-07-17 =
* Bug fix for XSS on the auth token name and description

= 2.3.7 - 2024-07-09 =
* Adjusted the text for width and height description
* Bug fix for customer name search - if the name do not match then no tickets are returned
* Small optical improvements

= 2.3.6 - 2024-06-19 =
* Adjustment to make the access to the admin page working according to the choosen role and not rights. But the acces right "read" is needed.
* Enhanced the search for tickets. You add now a text search value if you filter for a ticket list or other information.
* Force the text color for headings on the ticket scanner to use the assigned color and not use the CSS information, so that the information can be read even if you theme design is dark
* Bug fix for option wcTicketSetOrderToCompleteIfAllOrderItemsAreTickets - it will not overwrite the item_id and item in the function anymore - resulted in the wrong ticket number in the email

= 2.3.5 - 2024-05-27 =
* Fix domain to the new domain vollstart.com
* Bug fix for the user role access to the admin area
* Bug fix auth token redeem operation with one ticket number and/or variant products
* Removed small typos in the option area

= 2.3.4 - 2024-05-20 =
* Fixed the deprecated warning for the float conversion to int on the PDF library
* Fixed the auth token QR code content for the one with ticket scanner URL
* Fix for the attachment error with PHP8
* Revert new behaviour for the input fields at the cart - not stored automatically again - till the issues are fixed

= 2.3.3 - 2024-05-14 =
* Fix bug for option wcTicketUserProfileDisplayBoughtNumbers
* Fix bug to display only the price of one item to the ticket instead the sum of order item - what is wrong if you purchase more than 1 of the same item
* FAQ entry added - for own ticket scanner with full URL in QR code
* Auth code QR code is using now the full qualified URL to the ticket scanner
* Fix the ticket badge creation null pointer exception
* Added auto save for text inputs on the cart
* Added useful video links for use cases and which option could be helpful

= 2.3.2 - 2024-05-07 =
* Order view is not showning empty name or dropdown value anymore to prevent confusion
* Order view is not showning the location prefix anymore if the location value is empty
* Order view is shown captured value or dropwdown value in seperated lines if both are filled out
* Default end time 23:59 will not be shown anymore if no start time was added
* Bug fix for wcTicketSetOrderToCompleteIfAllOrderItemsAreTickets. Now only orders in processing are set to completed, if all products are tickets
* Bug fix for the missing customer name on the tickets table view
* Bug fix for ticket scanner url within the QR code with option ticketQRUseURLToTicketScanner
* Warning: Bug fix for the QR code with url to the ticket scanner - the template was adjusted. The code {{ TICKET.qrCodeContent|escape('html_attr')|raw }} is now {{ TICKET.qrCodeContent|raw }}
* The order view qr code is also evaluating now the option ticketQRUseURLToTicketScanner
* The QR code images for the email attachments are now also evaluating the option ticketQRUseURLToTicketScanner

= 2.3.1 - 2024-04-30 =
* Bug fix for removing tickets from refunded orders
* Bug fix for non existing date while creating ICS file to be attached to email - log entry removed if date is missing

= 2.3.0 - 2024-04-22 =
* Bug fix for mixed up options wcTicketDisplayProductAddons and wcTicketDisplayProductAddons
* Added option to display the addons of a product - wcTicketDisplayProductAddons
* Bug fix for the validator if the option value is missing
* New FAQ entry added - How to display meta information of the purchased item?
* Added a lot of filter and action hooks for implementation partners and plugin developers
* Moved premium feature wcTicketAddToOrderOnlyWithOrderStatus to premium plugin
* New option to set the error message for the missing user value and dropdown - wcTicketLabelCartForName, wcTicketLabelCartForValue

= 2.2.8 -2024-04-06 =
* Fix for variant ticket amount
* Added new section to have an FAQ - starting with some most experienced issues

= 2.2.7 - 2024-03-23 =
* Hot fix border on PDF - the full fix will be with next release

= 2.2.6 - 2024-03-22 =
* New option to display the add ons of a purchased ticket on the ticket - wcTicketDisplayProductAddons
* Adjusted the default template to display the add ons of a ticket
* Fix of the ticket URL of the test orders if you switched the compatibility mode - you need to reload the options once you change the value to have the new URL for the ticket designer preview
* Fix too early expiration message for premium serial
* Added WPDB to the twig editor, so you can make SQL statements within the ticket designer - but NOT recommended, you have to know what you are doing
* Ticket scanner authtoken can be set to allow only specific product ids to be retrieved and redeemed - great for events like movies or so
* The amount of tickets per product sale can now also be set on the variant product

= 2.2.5 - 2024-03-16 =
* Support for non-ansi codes in the ticket number like Umlaute added
* Check for the expiration of the support for premium license added
* Bugfix orderview is now finding the ticket number
* Opening the order ticket details tab on the order view is default now

= 2.2.4 - 2024-02-29 =
* New search option to search for the customer (billing lastname and first_name). Use CUSTOMER:xyz to search for tickets
* Dropdown to show you the possible magic search commands for the ticket search - it will prefill the filter keyword and you enter the search value after the command
* The order view is now displaying the names and products in the first box (Order Ticket Infos)
* Ticket scanner handles order view QR code and allows to redeem all tickets of an order at once or single tickets of the order
* New option to have additional text after the ticket number at the bottom of the default template - wcTicketAdditionalTextBottom

= 2.2.3 - 2024-02-18 =
* Add check for the allowed email status to prevent error with a wrong or not set configuration
* Adjusted the time and timestamp calculaton to use the datetime objekt - fix for the support info area
* New option to add a Rest service path for the ticket scanner - wcTicketCompatibilityModeRestURL

= 2.2.2 - 2024-02-09 =
* New option to hide ticket products if the event end date is passed - wcTicketHideTicketAfterEventEnd
* Date fix (again - sorry - the date with timezone is killing me) for the start date of an event

= 2.2.1 - 2024-01-24 =
* Display ticket infos (within the product) you will see also the order id for each QR code
* Add CUSTOMER variable for the ticket designer
* If product is missing, then the product name will not be retrieved for the preview orders
* Ticket scanner output shows the product information - ID, name + variants, SKU

= 2.2.0 - 2024-01-16 =
* Added new option for the ICS file to add the organizer tag - wcTicketICSOrganizerEmail
* Changed the date of the ICS to display the UTC date
* If no end time is added but the end date, then the end time will be 23:59:59
* Change the position of the ticket label options
* Ticket designer template values are now automatically saved
* New option to change the order status with a successfully redeem operation - ticketScannerSetOrderStatusAfterRedeem
* Change the search order to a deeplink to the order within the ticket admin detail view
* New option to change the order status automatically to completed, if all purchased items are ticket products - wcTicketSetOrderToCompleteIfAllOrderItemsAreTickets

= 2.1.11 - 2024-01-15 =
* Added the option to pass the CVV to the ticket number validator

= 2.1.10 - 2024-01-14 =
* The expiration date is not shown anymore on the ticket scanner if it is not set or 0
* Save in woocommerce order the public ticket id too
* Added a ticket PDF preview button to the Test Ticket Template Code option
* Option text fields are now 90% of the screen width
* Text editor for option wcTicketDesignerTemplateTest and the need to click on the save button for it
* Added to the template variables TICKET.start_time and TICKET.start_date_timestamp
* New function to ticket template available - getMediaData(media_id) - example {{ getMediaData(PRODUCT.get_image_id).url }} - [title, location, meta, url, suffix]
* Bug fix for missing date entry fields on the variant product
* Added test template chooser - it will load a template code into the test ticket template code area
* Added default template to choose
* Added one new ticket template to choose
* Fix label for the dropdown option of the product at the checkout
* Color on the ticket detail page for the label "wcTicketTransTicketRedeemed" will be green if still redeem operations are left
* Color on the ticket scanner for the label "wcTicketTransTicketRedeemed" will be green if still redeem operations are left
* QR image size for ticket badge added
* Added background image for ticket badge - wcTicketBadgeBG
* You can have now recurrent ticket product by just setting the time and not date part. This will calculate the entrance date to be today. If the end date is not set but the end time, then the start date will be used.
* The redeem amount of the product will be displayed below the button within the ticket scanner, if option active.
* Ticket admin detail view fix for the max redeem amount value - display
* New button "Remove Ticket Placeholder" to remove non-tickets from an order. This is helpful, if the ticket number placeholder was added by the system.

= 2.1.9 - 2023-12-30 =
* Emergency fix for the ticket generation - sorry

= 2.1.8 - 2023-12-28 =
* Fix amount of tickets for basic free plugin

= 2.1.7 - 2023-12-07 =
* Reverted to the old approach to render the QR Code image on the PDF with the default template. - not for QRCODE_INLINE, it stays like it is
* New option to use always the default ticket template code - wcTicketTemplateUseDefault
* Fix link to the Test PDF ticket
* QR code is again at the right possition below a banner if set for the default ticket template
* Default value of textarea options are now longer automatically added as a value of the textarea - makes it easier to understand if the default value is in place
* Small default ticket template adjustments to use also the QRCODE_INLINE and other optimizations

= 2.1.6 - 2023-12-06 =
* New option to hide the PDF download button on the ticket scanner - ticketScannerDontShowBtnPDF
* New option to hide the Badge download button on the ticket scanner - ticketScannerDontShowBtnBadge
* Fixed wrong start and end date display
* Fixed redeem allowed before timezone differ on Javascript

= 2.1.5 - 2023-12-05 =
* Fix time and date display
* Reguser name property bug removed

= 2.1.3 - 2023-12-05 =
* Timezone is not using default function anymore but the normal timezone setting - date and time changed to wordpress current_time
* Bug fix for metaobj woocommerce order creation date - it was storing the timezone instead the time and displayed 1970
* Change layout back for adding new tickets manually - again stacked layout for better support on smaller browser screen size
* Fix bug for error logging during the checkout processing
* Fix bug for the dropdown chooser default value of a product during the checkout processing

= 2.1.2 - 2023-11-28 =
* Ticket designer template adjustments - inspect the default template for changes
* Ticket designer template can now use the {QRCODE_INLINE} tag to place the QR-code anywhere
* Button at the ticket designer template displays the default temlate code
* PDF engine allows now TCPDF inline HTML tags - see more infos at https://tcpdf.org/examples/example_049/
* Bug fix for premium plugin check PHP8 ready
* Added a refresh table button for tickets
* Bug fix for redeemed date display
* New option to remove the margin on the PDF ticket - wcTicketPDFZeroMargin
* New product option to let your customer choose from a dropdown list
* New ticket bulk action to move several tickets into a ticket list

= 2.1.1 - 2023-11-20 =
* Display of the timezone and times within the support option fixed
* Timezone set with each file
* Timezone will be stored to the date values
* Bug fix default value for checkbox values
* New option to hide the ticket scanner options on the ticket scanner and use the new presets as default - ticketScannerDontShowOptionControls
* New ticket scanner option to start the cam immediately, overwrite the option setting just for the session
* New option to start cam immediately after scan of ticket - ticketScannerScanAndRedeemImmediately
* New option to hide the ticket information on the ticket scanner - ticketScannerHideTicketInformation

= 2.1.0 - 2023-11-16 =
* Plugin settings for the product will now also be shown if the product type is external "show_if_external"
* Fix bug that redeem immediately with the scan of the ticket
* New option for error message too late to redeem - wcTicketTransTicketNotValidToLate
* New option to allow a late redeem operation - wcTicketAllowRedeemTicketAfterEnd
* New option to skip the scan-next-button within the ticket scanner - ticketScannerStartCamWithoutButtonClicked
* Bug fix for the date placeholder on the ticket prefix
* Timezone of Wordpress or if not set from the PHP default will be set at the beginning

= 2.0.7 - 2023-11-14 =
* New default sorting on created date for tickets in the admin
* Buttons removed from the template code for the ticket designer - if you leave your existinge template code, then the buttons will be rendered twice
* New default value for option wcTicketTransTicketNotValidToEarly - Now it is "Event did not started yet", old value was "Ticket is not valid yet"
* Fix for multiple variant products PDF Allinone PDF generation - all variants are added to the PDF ticket
* Small rearrangement on the ticket scanner
* Scan & redeem immediately operation display the ticket details too
* Speed up scan & redeem immediately needs now only one server call

= 2.0.6 - 2023-11-09 =
* Bug fix while deactivating and deinstallation of the plugin - aaaah, how dare you to do this anyway :) - now you can without issues
* Bug fix for new order

= 2.0.5 - 2023-11-08 =
* Bugfix for the self-redeem button - it is added back to the template
* Removal and new default option for wcTicketDontShowRedeemBtnOnTicket => true - means for new installation it will be activated
* Add new option wcTicketShowRedeemBtnOnTicket to display the self-redeem button
* Rearrange object to speed up the loading time a bit
* Speed optimized by moving the hooks to the main file
* Added info value for overall total tickets in support

= 2.0.4 - 2023-10-27 =
* Small adjustment to error messages to make them more clear
* Name of the ticket person is now displayed also on the ticket scanner output
* Name per ticket included in the export as a single column
* Added date and timezone information to the support area
* Beta version for RTL support added - options for badge and ticket PDF

= 2.0.3 - 2023-10-23 =
* Fix layout of the ticket scanner rendered by the ticket scanner shortcode
* Fix new ticket template to display the name on the ticket
* New option to set the size of the QR code image within the PDF ticket

= 2.0.2 - 2023-10-17 =
* New option to display the PDF download for all-in-one PDF within the order detail view - wcTicketDisplayDownloadAllTicketsPDFButtonOnOrderdetail
* New option to set the paper size for the PDF ticket
* More error handling added
* Error Information shown to your customer if your product do not have a date for the ICS file
* Add bulk download for badges within the plugin admin area
* Error fix for ticket infos button within the product detail admin view

= 2.0.1 - 2023-10-11 =
* Fix cleaning up meta ticket information if the order information is removed from the ticket
* Replaced the filter format_datetime from the ticket designer with own implementation - removed the need of PHP module intl for the ticket designer

= 2.0.0 - 2023-10-09 =
* Fix for ticket amount on the ticket detail view and PDF for bundle tickets
* Ticket editor added with testmode
* New button within the admin ticket detail view to preview a ticket with the test ticket designer code

= 1.5.10 - 2023-09-26 =
* New option to not store the media device id of your cam when using the ticket scanner
* Add button to the ticket scanner to clear the stored device id from the browser - this will not reset the site permissions for the access to your camera
* Fix ticket deletion from the admin area
* New option to change the font on the PDF - this is to support different kind of character sets - eg. japanese can be supported by "cid0jp"

= 1.5.9 - 2023-09-20 =
* Fix export to not include the customer name if the option is deactivated
* New options to add your own QR code content - meant to be used by your own scanner and software - The ticket scanner will not work if this is activated!
* Add quick menu and a back to top button to the option area
* Add white background to the QR code and additional padding on the ticket detail page, in case your customer is using dark mode browser
* Add new button in order details to remove all tickets from an order - specially helpful in case you sold too many free tickets and upgraded to premium

= 1.5.8 - 2023-09-12 =
* Fix variant product short description
* Fix for the JS tag remover
* Renaming the default value for "wcTicketLabelOrderDetailView" from "Download Tickets" to "Open Tickets"
* New options to display the links for "Open Tickets" and "Download all tickets as one PDF" on the checkout page above the order details table
* Add placeholder value for option input fields - so you can see better the default value

= 1.5.7 - 2023-09-05 =
* Background image optimized to be not resized anymore and centered (for better image quality)
* Removed the default ob_flush operation to seed up your wordpress installation
* New option to activate the ob_flush operation in case your PDF is not rendered correctly
* Error Logs table added to the support area
* Added loop placeholder for the ticket badge editor
* Display of ticket order link is now covered by the option wcTicketAttachTicketToMailOf

= 1.5.6 - 2023-08-24 =
* Add a class="saso_eventtickets_request_name_per_ticket_label" to the label for the ticket value input
* Add order detail view link to admin ticket detail view
* Improved escaping for list name
* Bug fix PDF rendering
* Stolen ticket with CVV is fixed and display correct the stolen message

= 1.5.5 - 2023-08-17 =
* Double check for attachments implemented
* QR images also in /tmp folder created
* Option displayAdminAreaColumnBillingName will also export the name as a single column
* Export the customer name of the order in column "meta_wc_ticket_customer_name"
* XSS vulnerable fix
* Look and feel of the user profile ticket list is enhanced
* New option to display the redeem amount and ticket detail page within the user profile

= 1.5.4 - 2023-08-10 =
* Fix for redeem operation - false multiple redeem operation
* Auth token now also with QR code to open the ticket scanner immediately
* New option to control the QR codes and badges as one PDF independent - qrAttachQRFilesToMailAsOnePDF
* Small fix for the back- and frontend calls

= 1.5.3 - 2023-08-02 =
* Add auto table repair if a db error happens
* Fix authtoken creation

= 1.5.2 - 2023-08-02 =
* If the option for URL is set for the QR code, then it will be also used now on the ticket detail QR
* Batch operation (bulk) for tickets. Download all as one PDF. Beta version. Timeout could happen by too many tickets.
* Order PDF Ticket link added to the admin ticket detail view
* The first ticket list will be default for new products - to speed up the setup process
* The product and order page is no longer reloaded if you click on a button to download a ticket or flyer
* Back button menu extend to have also the buttons to the other areas
* Fix wp-cli cron job exception

= 1.5.1 - 2023-07-18 =
* New option for QR code as an image. Now you can attache only the QR code as an image and as PDF to the purchase email
* Authentication token for the ticket scanner added. You can now give access by letting them scanning the qr code

= 1.4.12 - 2023-07-05 =
* Optical improvements to the ticket scanner
* The settings on the ticket scanner for "Scan & Redeem" and "Hide ticket details" are stored now in cookies, to be restored
* Bug fix for the error message dialog background of the ticket scanner
* New product option to create bundle products - determine how many ticket numbers should be created with the sale of one product

= 1.4.11 - 2023-06-27 =
* Reset button to delete all option values and use the default value
* New option for a global webhook: if the ticket is assigned to an order
* New option for a ticket list webhook to override the global webhook for the "ticket is assigned to order"
* Bug fix for the search option on the ticket table

= 1.4.10 - 2023-06-22 =
* Permalink structure is checked now on the options and an info message is displayed in case it is not set
* Fix for the get_wcTicketAttachTicketToMailOf to support also bases plugin and not harm Premium

= 1.4.9 - 2023-06-19 =
* New option to attach the QR as a single file (or one-all-pdf) to the purchase email
* Attach of ticket badge and qr image added to free version for processing and completed purchase email
* Badge pdf download in admin ticket detail view is now directly showing the PDF
* Ticket pdf download in admin ticket detail view is now directly showing the PDF
* Download for the all-in-one PDF will only be shown in email, if the ticket numbers are assigned to the order
* Included the paid tax for the ticket
* Display the tags for the ticket below the badge editor textarea
* Self Redeem option is set to false for the default value
* New option for the QR code on the ticket. You can have now the full URL to your ticket scanner and with the code ready to be scanned
* Switch from GET to POST for the code retrieval for the datatable within the ticket admin

= 1.4.8 - 2023-06-12 =
* Fix for PDF orientation in case the width is bigger than the height for the PDF badge
* Fix for UTF8 codes

= 1.4.7 - 2023-05-31 =
* Download button for the Ticket Badge can be displayed on the ticket detail view for your customer
* Ticket Badge download link can be added to the purchase emails
* Attach ticket badge to the purchase emails
* Attach ticket badges as one PDF to purchase emails

= 1.4.6 - 2023-05-27 =
* Fix bug for the immediately scanning of tickets with the ticket scanner

= 1.4.5 - 2023-05-24 =
* Fix for translate press manipulation of the URLs
* Allow tracking of the IP for more occasions (premium)
* Add several areas where the expiration date is determined (premium)

= 1.4.4 - 2023-05-16 =
* You can download all tickets of an order within the order details
* New option to attach the download link for only PDF with all tickets to the purchase emails - below the order table
* New option for the heading of the download section after the order details table within the purchase order email - default "Download Tickets"
* Wrapping several WooCommerce functions to preven error message in case you deactivate your woocommerce - woocommerce is needed for this plugin
* Ticket Badge Editor allows now to use {ORDER.get_meta.YOURFIELDNAME}

= 1.4.3 - 2023-05-11 =
* New option. Allow to attach a PDF to the ticket as additional pages
* Fix expiration check for tickets without an end time - taking 23:59:59 as end time if empty
* Added ticket badge download within the ticket scanner
* New option to hide the price on the ticket. The ticket scanner will still display it
* Fix for the download option for (ICS and PDF) on the ticket detail with the compatibility mode

= 1.4.2 - 2023-05-08 =
* You can change now the ticket per name within the ticket detail view
* New Bulk operation for tickets: Remove the used marker
* New Bulk operation for tickets: Remove the redeem information
* Fix. The ticket name will not be removed if the ticket is un-redeemed

= 1.4.1 - 2023-05-04 =
* Expiration date information is not displayed, if the ticket do not expired
* Ticket Scanner button is using the ticket URL path if set within the options
* New option to control when the tickets are assign to the order items (only if premium is available)
* Fix free tickets if the order was refunded
* Fix ticket badge to allow no QR code
* Added a tag list for the ticket badge Editor

= 1.4.0 - 2023-05-01 =
* Ticket badge PDF Editor for your customer. Use it as a name sign or venue badge
* Ticket badge PDF download for the ticket
* Each option display now the option key, that can be used as a placeholder on the ticket badge designer
* Clean up additional output before the ticket PDF is generate, to prevent collision with the PDF output from other plugins that are echo or print_r information before.
* Deprecated WooCommerce hook woocommerce_add_order_item_meta is removed
* With bulk operation the PDF ticket attachments are cleaned up before processing the next order

= 1.3.15 - 2023-04-23 =
* New option on the product to make the name per ticket mandatory

= 1.3.14 - 2023-04-14 =
* Fix output of name counter on ticket
* Fix URL path for the ticket detail view
* New options (including label) to display the registered user value on the ticket

= 1.3.13 - 2023-04-12 =
* New option to define the ticket detail page path to display the ticket detail
* Download link and ticket number on the email is now more visible
* New webhook for usage of restricted code on order item

= 1.3.12 - 2023-04-10 =
* Distract free ticket scanner option
* Force responsive for the ticket scanner view for better experience
* Fix retrieving default value of an option

= 1.3.11 - 2023-04-05 =
* Fix validation meta data object for the ticket
* Add new translation option for the ticket heading
* Small performance improvement getting the codes for the backend
* Added some checks for broken codes while retrieving them for the admin area

= 1.3.10 - 2023-04-03 =
* Fix for the ticket scanner access control description text
* Add a new QR image in the backend to have the QR code with the public ticket number, that can be also used with the ticket scanner
* WARNING: Default option value changed for "Clear the ticket number if the order was deleted, canceled or refunded"! The default is now: activated - what makes more sense

= 1.3.9 - 2023-03-25 =
* Fix for pages without correct timezone setting

= 1.3.8 - 2023-03-24 =
* Support for old WC added

= 1.3.7 - 2023-03-23 =
* Fix name per ticket display
* Change the layout and heading of ordered items on the ticket details
* Expiration warning on the ticket fixed for events without a end date

= 1.3.6 - 2023-03-21 =
* Remove the name per ticket from the product meta and moved it to the session
* Session data for the name per ticket will be deleted after the purchase

= 1.3.5 - 2023-03-20 =
* Fix column customer if the order was deleted already
* New option on the product to collect names for each sold ticket. The name will be printed on the ticket
* Added new export column for the public ticket id
* Your server timezone is used on the ticket scanner to determine the expiration status
* New option to print all qr codes of the tickets for a product

= 1.3.4 - 2023-03-09 =
* Access to admin area can be controlled by roles
* New option to prevent ticket beeing too early redeemed
* Ticket scanner has now an option to automatically redeem the ticket after retrieving it

= 1.3.3 - 2023-03-02 =
* New option for variable products, you can exclude now variants to be treated like a ticket
* Download option for the ICS calendar file within the product detail view
* Adjusted the ICS File to use the timezone
* Adjusted the ICS File - if no start time is set, it will be a day event
* If the order was not paid or completet, then the payment order dates are not shown on the ticket
* Fix for the missing end time on the ticket EXPIRE message

= 1.3.2 - 2023-02-23 =
* New option to display the ticket list name on the ticket
* New option to display the ticket list description on the ticket
* New option to display all purchased items of the order on the ticket
* If the customer order note is emtpy, the quotes are nor displayed
* Option area reposition some option to make it easier to find them
* Optimize the PDF invoice print - still a problem if you have so many ticket numbers, that they cannot fit within one invoice page
* Added optimization for plugin "PDF Invoices & Packing Slips for WooCommerce" and many tickets sold in one order
* Delete ticket repaired

= 1.3.1 - 2023-02-20 =
* Fix ticket list delete and tickets
* Add new option to have the purchase customer note on the ticket

= 1.3.0 - 2023-02-15 =
* Added support for plain permalinks for the ticket scanner
* New option to hide the event date from the ticket
* New option to activate a compatibility mode for the ticket urls in case you experience issues
* Fixed color issue of the ticket title and event name, so that your theme is not overwriting it
* Bug fix option to print the ticket number within the email to the buyer
* Ticket PDF will have the ticket number and order id in the filename if downloaded
* Label replacement for location used also on the product edit level
* Wording optimized
* Translation WPML added for English and German

= 1.2.11 - 2023-01-22=
* Display the public ticket id within the ticket admin detail view
* Fix redeem max amount value on the ticket admin detail view for 1 time redeem allowed tickets
* Display the purchase date within the ticket scanner
* Expiration operation extended to the ticket scanner - premium feature

= 1.2.10 - 2023-01-17 =
* Fix product view
* Rearrange the initial action and filter handler to be loaded
* Replacing whitespace of the ticket number prefix with "_"

= 1.2.9 - 2023-01-16 =
* Fix on ticket scanner to re-enter the input field for barcode scanner
* Optimization of classes and calls
* Fix issues with wp-cli calls
* Move Woocommerce handler to class
* Add new option to display the customer name for a ticket within the admin area on the ticket table
* Add new option to display the redeem counter and max value for a ticket within the admin area on the ticket table
* Increased the template redirect, so that the ticket detail page will be loaded on more templates

= 1.2.8 - 2023-01-08 =
* CVV number will also be visible on the plain email template (which is often used by invoice plugins)
* On plain mail or invoice plugins that are using the plain mail output, the hide ticket detail link will be also effective
* The hide ticket detail link will be also effective on the WCPDF plugin output
* PDF Download link will be visible also on the plain email template
* On plain mail or invoice plugins that are using the plain mail output, the hide ticket PDF link will be also effective
* Powered by sentence on the PDF ticket is shorten and the font size is set to 6pt
* Added new placeholder for the amount of tickets purchased on one item to display the position: {TICKET_POSITION}
* Add download button for PDF ticket to the ticket number details view

= 1.2.7 - 2023-01-04 =
* Fix of the missing ticket bug (one ticket or none ticket numbers where generated)
* Ticket numbers are no longer automatically freed if the order was cancelled. Only if the option for this is activated.

= 1.2.6 - 2023-01-03 =
* Fix if no free tickets are available anymore, then the message will be shown instead of the ticket number
* Fix the display on the support info
* Small optimizations

= 1.2.5 - 2022-12-31 =
* Add more infos to the support information panel
* Bug fix for redirect btn label
* Fix table definition of ip list
* Code size to 150 letters increased

= 1.2.4 - 2022-12-26 =
* Fix export of woocommerce ticket infos
* Bug fix email

= 1.2.3 - 2022-12-26 =
* New option to display the confirmed status counter on the ticket scanner view. The confirmed status counter is increased with each validation check of the ticket number
* New option to increase the confirmed validation check with a scan by the ticket scanner
* Introduced multiple redeem option. New product option to allow more than one time a redeem operation within the scanner
* Fixed bug to show the expired ticket warning
* Display more ticket information within the ticket scanner
* You can now enter date placeholder on the code prefix that will be replaced when the code is generated. Makes sense on the lists and product.
* The list of ticket numbers is now sorted by the creation date descending, to find faster your new generated ticket numbers
* Order processing optimized

= 1.2.2 - 2022-12-10 =
* If the order is cancelled, the used ticket codes will be freed up
* Quantity check while adding ticket number to the order
* Add stats to support area

= 1.2.1 - 2022-11-30 =
* Add input text field on the ticket scanner to use a keyboard or other external scanner
* Fix Ajax loading

= 1.2.0 - 2022-11-29 =
* Add action for option update
* Add new search option for registered user id
* Allow spaces between the search commands (LIST:, ORDERID:, CVV:, STATUS:, REDEEMED:, USERID:)
* Add new option "Clear the ticket number if the order was deleted or a refund triggered" to free up ticket numbers, if the order is cancelled or deleted
* Add new option "Allow to redeem ticket only if it is paid" for your ticket scanner user too
* Add new option "Display product variant name" to be shown on the ticket PDF
* Add the new ticket elements also to the ticket scanner
* Add new shortcode [sasoEventTicketsValidator_ticket_scanner] to have the ticket scanner rendered on your own page (security features are still executed)
* Add new option to display registered ticket numbers in the user profile view
* Add new option to display bought ticket numbers in the user profile view

= 1.1.10 - 2022-11-21 =
* Date format also for the event date
* Layout PDF ticket optimized for small event description
* Added support for product with variants

= 1.1.9 - 2022-11-16 =
* Added date and time format for ticket display to the client
* New option to set the font size for the PDF ticket
* Optimize ticket layout to have more space for event description
* New option to remove the HTML elements on your short description and ticket info for the PDF ticket

= 1.1.8 - 2022-11-09 =
* Added more error handling to the PDF generation
* Adopt the time within the ICS calendar file
* Add location to the ICS calendar file

= 1.1.7 - 2022-11-03 =
* Fix ticket detail page

= 1.1.6 - 2022-11-02 =
* You can choose a role to restrict access to the ticket scanner page
* Small bug fixes and optimizations

= 1.1.5 - 2022-10-31 =
* Tickets will be created only if the payment was completed or in processing. This should prevent tickets for failed payments.

= 1.1.4 - 2022-10-26 =
* Hide ticket and serial code information if the order is not paid

= 1.1.3 - 2022-10-14 =
* Catch deleted orders on the ticket detail view
* Adopted scanner page to reflect the errors while retrieving and redeeming tickets
* Fix error message for new products
* Removed Product Flyer button from the product edit page for *new* products

= 1.1.2 - 2022-10-09 =
* New scanner page displays the redeemed tickets if not dedicated in the options
* Ticket scanner shows also created tickets with order date

= 1.1.1 - 2022-10-06 =
* JS redirect fixed
* Fix clickable serial code in order view if more than one serial was added
* Optimization to overall loading/exectution time

= 1.1.0 - 2022-10-04 =
* Changing the page for the ticket scanner
* Add new option to add an URL for the QR code to be displayed
* Add button to display the QR with an URL in it
* Preview of QR image is now with the content visible
* Add new filter for JS redirect "saso_eventtickets_getJSRedirectURL"

= 1.0.12 - 2022-09-27 =
* Add button to display the QR with just the ticket number in it
* Add button to display the QR with URL to the PDF and ticket number in it
* Add global redirect URL option for user who redeem their own tickets
* Add translation option for ticket information on the detail view and PDF

= 1.0.11 - 2022-09-22 =
* Default value is changed to true for the option ro reuse not used ticket numbers within a ticket list assigned to a product
* Fix ticket scanner URL

= 1.0.10 - 2022-09-21 =
* Add new information to the support area
* Optimized the URL building for the ticket URLs

= 1.0.9 - 2022-09-20 =
* New field to see if the ticket is redeemed on the admin area
* You can search and filter for redeemed tickets within the admin area REDEEMED:[1|0]
* New option: Add the quantity of the purchase tickets of an item within an order to the ticket PDF.
* New option: Define the text "quantity purchased tickets" for ticket PDF
* Footer on the PDF font size decreased

= 1.0.8 - 2022-09-14 =
* Ticket scanner error message optimized
* Ticket scanner scan and loading of the ticket optimized
* Order status to redeem tickets set to "processing" and "complete"
* Error message during redeem for #8003 optimized

= 1.0.7 - 2022-08-22 =
* Only ticket codes are generated, no longer restriction codes
* Fix product formatter values
* Remove product serial information with code deletion
* Small Optimizations

= 1.0.6 - 2022-08-19 =
* Fix hanging ticket scanner

= 1.0.5 - 2022-08-17 =
* Serial code options removed
* New option: Show event date on mail and pdf
* New option: Show event date on product detail page

= 1.0.4 - 2022-08-16 =
* New option to hide your wordpress name and URL from PDF ticket
* Newline in ticket info added
* ICS calendar file can be attached to the WooCommerce mails
* ICS calendar file can be downloaded on the detail page

= 1.0.3 - 2022-08-12 =
* New option to add a global logo to the ticket flyer
* New option to add a global banner to the ticket flyer
* New option to add background image to the ticket flyer
* New option to add a global logo to the ticket PDF
* New option to add a global banner to the ticket PDF
* New option to add background image to the ticket PDF

= 1.0.2 - 2022-08-09 =
* New browser window open if clicked on the ticket detail view after purchase an event ticket
* Add image for the ticket scanner to show if redeeming a ticket was successful or not
* Code list at WooCommerce product detail is sorted now
* Add PDF event flyer download with qr code
* New option to hide your wordpress description from the flyer and PDF ticket
* Allow HTML like on posts for event ticket short description and info text
* Display price on ticket with currency and two decimal digits

= 1.0.1 - 2022-08-07
* HTML can be used on the ticket detail note and product description
* Font changed to support arabic letters

= 1.0.0 - 2022-08-05 =
* Initial Public Release
