=== TicketDrum – Event Tickets & QR Check-in ===
Contributors: markgarbers
Tags: tickets, event tickets, qr code, check-in, stripe
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.3.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Sell event tickets on your own site, no WooCommerce needed. QR tickets, phone check-in, promo codes, waitlists. Paid direct to your Stripe account.

== Description ==

TicketDrum (Ticket Drum) turns your WordPress site into your own box office. No WooCommerce required, no paid add-ons, no subscription - one all-in fee of 4.9% + 30p per paid ticket (card processing included), and free tickets are always free.

https://www.youtube.com/watch?v=P8TA_yrqG1s

**Everything included:**

* Sell tickets on your own pages with the TicketDrum block (or a shortcode)
* Payments direct to your own Stripe account - we never hold your money
* PDF tickets with QR codes, attached to every confirmation email
* Door check-in: scan QR codes with your phone camera, no extra app
* Promo codes with usage limits and expiry dates
* Waitlists that automatically email buyers when spaces open up
* One-click refunds (our fee is refunded to you too)
* Printable receipts, automatic Stripe receipts, add-to-calendar files
* Custom checkout fields, attendee lists and CSV exports
* Sales dashboard, capacity limits and oversell protection
* Event structured data for Google event rich results

**Pricing:** the plugin is free. We charge 4.9% + 30p (or equivalent in your selling currency) per paid ticket, collected automatically through Stripe - card processing costs are included in that fee. By default the booking fee is paid by the ticket buyer, so you keep 100% of your ticket price.

**Everything except card payments works with no account.** To take card payments, connect your free TicketDrum account in one click - see the FAQ for how it works.

**Your buyers' data stays on your site.** All email is sent by WordPress itself, so buyer names, email addresses, tickets and receipts are never sent to us. The only personal data that leaves your server is what Stripe needs to take a card payment.

== External services ==

This plugin uses two external services: the TicketDrum service (operated by us) and Stripe. They are what makes card payment possible. Details of what is sent, when, and why:

**1. TicketDrum service (ticketdrum.com / api.ticketdrum.com)**

TicketDrum operates the Stripe Connect platform account through which card payments are processed. The plugin sends nothing to the service until you click Get Started on the TicketDrum dashboard. After that, it contacts api.ticketdrum.com in exactly two situations, and in neither is any personal data sent:

* **When you click Get Started:** your site's domain name is sent so the service can register the site and issue the account ID that identifies it.
* **When you connect or disconnect Stripe (Settings → Stripe):** your account ID is sent to fetch or revoke the Stripe Connect credentials issued to the platform for your Stripe account.

That is the complete list. No buyer or visitor data, no order data, no email content, no usage statistics, no analytics and no error reports are ever sent. Confirmation emails, tickets and receipts are generated and sent entirely by your own site using WordPress's own wp_mail function.

Terms of service: https://www.ticketdrum.com/content/terms - Privacy policy: https://www.ticketdrum.com/content/privacy

**2. Stripe (api.stripe.com / js.stripe.com)**

Stripe processes all card payments; payments go directly to your own connected Stripe account. The checkout page loads Stripe.js from js.stripe.com (required by Stripe for PCI-compliant card collection - card details are entered into Stripe's own secure fields and never touch your server). When a buyer pays, the order amount, currency, order description and the buyer's name and email address are sent to api.stripe.com to create and confirm the payment and a customer record in your Stripe account.

Terms of service: https://stripe.com/legal/ssa - Privacy policy: https://stripe.com/privacy

== Installation ==

1. Install and activate the plugin.
2. Create an event and its ticket types.
3. Add the TicketDrum block to any page. You are now selling free tickets, with QR ticket PDFs and door check-in.
4. To take card payments, click Get Started on the TicketDrum dashboard to connect the site, then go to TicketDrum → Settings → Stripe and link your Stripe account.

== Frequently Asked Questions ==

= What does it cost? =
4.9% + 30p per paid ticket, all-in - card processing included. Free tickets are free. No subscription.

= When do I get my money? =
Immediately - payments go directly into your own Stripe account at the moment of sale.

= Do I need WooCommerce? =
No. TicketDrum is completely standalone.

= My buyers are not receiving their ticket emails =
Ticket emails are sent by WordPress itself, so they are subject to whatever mail setup your host provides, and a lot of shared hosting either sends nothing or lands in spam. The fix is the same as for any WordPress email: install an SMTP plugin and point it at a proper mail service. TicketDrum needs no configuration for this and will use it automatically. Sending mail yourself also means your buyers' names and email addresses never leave your site.

= Why do card payments need a connection to TicketDrum? =
TicketDrum holds the Stripe Connect platform account that your own Stripe account links to. Connecting an account to a platform is an OAuth exchange that Stripe will only complete against that platform's client ID and client secret, and Stripe issues the resulting connected-account credentials to the platform, not to the site. A platform's client secret cannot be distributed inside a GPL plugin: it would be readable by everyone who downloaded it, and Stripe's terms do not allow it. The exchange therefore has to happen on a server we control. That is real processing which the plugin genuinely cannot do locally, not a check standing between you and code you already have.

Clicking Get Started registers your site's domain and issues an account ID identifying you to that platform. Nothing is sent to ticketdrum.com before you click it.

= Is any feature locked or limited? =
No. Everything except card payments works with no connection at all: events, ticket types, free tickets, PDF tickets with QR codes, confirmation emails, door check-in, promo codes, waitlists, capacity limits, attendee lists, CSV exports, receipts and calendar files are all produced on your own site and need no account, no key and no connection. Nothing is disabled, time-limited or usage-capped.

There is no lock of any kind in this plugin. No feature is disabled, time-limited, usage-capped or held back pending payment. The account ID is not a licence key: nothing verifies it, nothing expires, and removing it simply stops the Stripe Connect handshake from being possible. The service endpoints are ordinary constants (TICKETDRUM_URL and TICKETDRUM_API_URL) which you can redefine in wp-config.php to point somewhere else entirely. All the code is plain, readable PHP with nothing obfuscated or minified.

= What about refunds? =
Refund from your dashboard in one click; our booking fee is refunded to you in proportion.

= How is tax handled? =
You set the tax mode (none / included in prices / added at checkout), the label (VAT, GST, Sales Tax...) and a default rate in Settings, and individual tickets can override the rate - including to 0 for exempt tickets. You are responsible for the tax rules that apply to your events.

== Screenshots ==

1. Buyers pick their tickets right on your event page - no redirect to another site.
2. An upcoming-events list for any page, from a block or the [ticketdrum] shortcode.
3. The dashboard: revenue, tickets sold, daily sales and recent orders at a glance.
4. Every purchase, searchable, with CSV export of purchases and attendees.
5. Events with live attendee counts against capacity.
6. Door check-in: scan the QR code with a phone camera or type the ticket code.
7. Each ticket is a PDF with its own QR code, attached to the confirmation email.

== Changelog ==

= 1.3.2 =
* Tidier getting-started checklist on the dashboard (numbered steps, no empty box characters)

= 1.3.1 =
* Fix: a newly added ticket type now starts active, for one attendee, with up to 10 per order. Previously the Add New Ticket form left it inactive with a quantity of 0, so it didn't appear for buyers
* Checkout and confirmation emails no longer show a zero tax line when no tax is charged

= 1.3.0 =
* Translation-ready: every screen, email, ticket and checkout message can now be translated at translate.wordpress.org
* A one-time, dismissible review request after your first door check-in or fifth order
* PDF tickets keep accented characters and the euro sign when a name or title also contains an emoji or other character the PDF font can't show
* System info now reports the actual plugin version

= 1.2.2 =
* Clearer plugin name, tags and short description in the plugin directory

= 1.2.1 =
* Fix: check-in log is readable on a phone (no mid-word breaks or clipped status labels)
* Fix: "already checked in" time is shown in the site's timezone, matching the session log
* Fix: fixed-amount promo code discounts were hidden behind the code in the Promo Codes table

= 1.2 =
* Renamed to TicketDrum
* QR ticket PDFs attached to confirmation emails, plus print-at-home link
* Door check-in with camera QR scanning
* Promo codes, waitlists, one-click refunds
* Sales dashboard, duplicate events, event location + Google event structured data
* Add-to-calendar files, printable receipts, Stripe receipts
* Gutenberg block for adding ticket sales to any page
* All-in fee structure with buyer-pays option

= 1.1 =
* Original release as TicketDrum
