=== Takt Site Features ===
Contributors: arbergashi
Tags: events, music, albums, football, calendar
Requires at least: 7.1
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 2.0.3
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Bring your club, events, music and photo albums together in WordPress. Free Takt site features, with optional WooCommerce shop integration.

== Description ==

Your website should help people follow your team, find their next event,
discover your work and feel part of your community. Takt Site Features brings
that content together in WordPress, with focused editing tools and blocks you
can place where they make sense.

It is the free site-feature component of Takt. The Takt theme provides the
visual design; this plugin provides the structured content and optional tools.
Every feature is included. There is no paid Takt edition, license key,
subscription, website limit or trial period.

**A home for the whole club**

Introduce your teams, players and staff. Publish fixtures and results, show
lineups and match timelines, maintain league tables and player statistics, and
give sponsors a clear place on the site. Visitors can explore upcoming matches,
find venue information and subscribe to a fixture calendar.

Present the people behind the club through boards, offices and committees.
Each group has its own responsibilities, public contact information and ordered
member list. Reuse a person across several groups with a different role in each,
and organize departments as subgroups. Native WordPress blocks and editable
templates let you choose how the organization is presented.

Tell the club's history with editable milestones, honours, setbacks and archive
sources. Season reviews preserve intentionally saved historical squad details
separately from today's profiles and connect to the corresponding results and
standings. Existing club records and customer layouts remain in place.

Bring league standings in from a spreadsheet with CSV import, validation and a
complete preview. Apply the reviewed rows to the editor, then save the table
through WordPress. Export the saved standings whenever you need them elsewhere.
Official ranking order and point deductions are preserved.

The guided Club Setup lets you choose your identity and pages, review the
planned changes, then create an editable starting point. Include a Ticket
Corner, photo albums and, if your club has one, a restaurant page with opening
hours, food information and contact details. Optional sample content can help
you get started and can be removed when your own content is ready.
Repeated setup preserves your pages, including deliberately emptied content,
existing logos and customer edits. Navigation changes require an unambiguous
menu choice, and setup retains the ownership of its own sample records.

**Tickets and a fan shop that fit your club**

Link a match to a product in your own WooCommerce shop, add a direct Ticketcorner
booking link, or offer both purchase options together. The Ticket Corner brings
upcoming fixtures, ticket availability and editable visitor information into
one place. External booking links also work without WooCommerce.

For merchandise, the optional shop integration includes jersey personalization.
WooCommerce manages products, prices, stock, orders and checkout. You choose and
configure the payment, shipping and tax services for your store. The optional
Digital admission tickets module issues one QR ticket per paid unit and provides
mobile check-in for authorized staff. Customers can show tickets on a phone,
print them or save them as a PDF through their browser. Ticketcorner is an independent
provider, and the connection is a booking link rather than an API integration.

Open Club > Tickets to manage existing ticket products and match purchase
channels, then edit products with the normal WooCommerce tools. Single tickets,
season passes and annual passes can coexist. Passes are paid once, have fixed
start and end dates, and never renew automatically. Select the included matches
or events explicitly. With digital admission enabled, each purchased unit has
one QR code for one admission to each included event. Purchased rights are
retained when a product changes; new fixtures are not added automatically.
The digital module is optional and is not enabled by offer management.

**Tell the story beyond matchday**

Build a Club TV page from existing WordPress posts. Choose an editorial video
spotlight and a news category, show locally selected poster images, and browse
the archive with pagination. Use uploaded videos or YouTube/Vimeo embeds;
supported livestream links use the provider's broadcast service. Optional
click-to-load controls let visitors decide when an external player connects.
No stream server, automatic broadcast status or video hosting account is supplied.
Club > Club TV brings existing video posts and Club TV pages into one searchable
administration view. Edit them directly or create a video post or Club TV page
with native WordPress blocks; no duplicate content library is created.

Organize photo albums and present galleries with WordPress image blocks. Share
events and venues, publish tour dates and calendar subscriptions, or introduce
music releases with track information and audio players. These modules also
serve bands, artists and cultural organizations. Enable the modules you need
and leave the others switched off.

**Make the presentation your own**

With Takt or a Takt child theme active, use editable page patterns and visual
presets, add optional icons to native navigation links and submenus, and choose
the site's color mode and default title preference. Album and event import
tools and optional login styling are available for sites that need them.

Content modules work with other themes; Takt-specific patterns and presets need
Takt. Content is stored in your own WordPress database and media library. The
site's settings control language and dates, and WooCommerce controls currency
and number formatting. English is the source language. Bundled translations
cover Albanian (sq), Italian (it_IT), French (fr_FR), German (de_DE), Dutch
(nl_NL), Swedish (sv_SE), Portuguese for Portugal (pt_PT) and Spanish for Spain
(es_ES), Norwegian Bokmål (nb_NO), Finnish (fi), Icelandic (is_IS), Turkish
(tr_TR), Greek (el) and Polish (pl_PL), plus formal German (de_DE_formal) and
German for Switzerland (de_CH).
The same languages cover the block editor controls. Choose the public language
under Settings > General > Site Language and an editor's administration language
under Users > Profile. Existing page content and menu labels remain as authored.

Full dates and times use the website's Date Format, Time Format and Timezone
settings, including US month/day/year and 12-hour clocks or European formats
and 24-hour clocks. WordPress provides localized month and weekday names.
Compact event ranges use a translated format; stored dates, calendar feeds,
HTML datetime attributes and structured data retain their technical formats.
An unconfirmed match kickoff appears in calendar subscriptions as a tentative
date on the site's local calendar, without blocking the entire day as busy.
Confirming the time updates the same event; cancellations remain cancelled.

**Free software, with practical defaults**

Takt does not require a developer account or contact a license service. Existing
Takt Pro content and module settings are retained when updating. Structured
club data is maintained by your editors; an official league data feed is not
included. Sample clubs, photographs and match details demonstrate the layouts
and should be reviewed and replaced for your own website.

== Installation ==

Takt Site Features 2.0 requires WordPress 7.1 or later and PHP 8.1 or later.
Update WordPress before installing this version.

1. Install and activate the Takt theme if you want its integrated visual design.
2. Install and activate this free Takt companion plugin.
3. Open Appearance > Takt and enable the modules needed by your website.
4. For a club, open Appearance > Club Setup. Enter the club details, choose the
   pages and optional sample content, and review the changes before creating them.
   Existing customer edits are retained on repeated runs.
5. Replace sample details, add your own teams or other content, and edit the
   navigation and page layouts in the WordPress editor.
6. Install and configure WooCommerce only if you want your own shop. Test your
   checkout, payment methods and ticket fulfillment before accepting orders.

For an existing manual Takt Pro installation, follow the folder-transition
procedure below before installing this package.

= Moving an existing manual installation =

Existing manual installations using the old takt-pro folder need a one-time
folder transition before installing this WordPress.org package. It is not an
in-place automatic update across the two directory names:

1. Back up the database and plugin files, then deactivate the old Takt plugin.
   Do not click Delete: uninstalling removes the shared module settings and
   preset, and may remove content if its optional purge flag was enabled.
2. Using the hosting file manager or SFTP, rename
   wp-content/plugins/takt-pro to wp-content/plugins/takt-site-features.
   If that destination already exists, stop and resolve the duplicate before
   continuing. Do not activate both copies.
3. In Plugins > Add New > Upload Plugin, select this ZIP and choose to replace
   the existing plugin. Activate Takt Site Features after replacement.
4. Check the module selections, saved content and pages. Once the plugin is
   published, subsequent updates use the native WordPress.org update mechanism.

Renaming and replacing the single folder does not run uninstall.php. Existing
content, block identifiers and option keys stay the same; no second product or
parallel installation is required. Ask your hosting administrator to perform
the folder step if you do not have file-manager or SFTP access.

== Frequently Asked Questions ==

= Is everything free? =

Yes. Every feature formerly offered as Takt Pro is free. No license key,
subscription or purchase is required. There is no site limit or expiry.

= Is this a second product or a paid upgrade? =

No. It is the free site-feature component of Takt. WordPress.org separates theme
design from custom content types and custom blocks, so they are installed as a
companion plugin. Historical technical names are retained for compatibility.

= What happens to my existing Takt Pro website? =

Existing content, media, metadata, module switches and presets are retained.
The former license check and private updater are retired. Historical entitlement
records remain stored for recovery but are no longer used or transmitted.
Plugin updates use WordPress's native update mechanism.

= Where do I change Takt's color mode or design version? =

With this plugin and Takt or a Takt child theme active, open Appearance >
Customize > Color scheme or Takt design and compatibility. These optional
controls retain the existing theme-mod IDs and saved values. Deactivating the
plugin removes the controls; the theme keeps using the saved choices and
remains fully functional. Native Site Editor styles and per-page template
choices are available without the plugin.

= Does disabling or deleting the plugin remove my content? =

No. Disabling a module or the plugin can hide its editing tools and custom
rendering, but the stored content remains. Uninstall removes settings and keeps
content unless the site owner explicitly enables TAKT_PRO_REMOVE_DATA first.

= Does the plugin send data to the developer? =

No. Takt does not require an account, contact a license service or send telemetry.
WordPress performs its ordinary update checks. Optional third-party embeds and
WooCommerce follow their own privacy settings and policies. Profile information
is stored in your site's database and appears when you choose to publish it.

= Do I need WooCommerce? =

Only for shop features. Events, music, albums, clubs and the other content
features work without WooCommerce. Digital paid admission tickets require it;
free event registrations and waiting lists do not.

= Can a club sell tickets in its own shop and use Ticketcorner? =

Yes. For a match, select a public WooCommerce product by name or SKU and add the
direct HTTPS Ticketcorner booking URL if needed. Both purchase actions can
appear together. The existing ticket URL also supports another provider.
WooCommerce handles the club shop's prices, stock, variations and checkout.
The Ticket Corner page lists upcoming fixtures and availability, with editable
visitor FAQs. External booking links work without WooCommerce. Enable Digital
admission tickets separately to issue QR tickets from paid WooCommerce orders.
Assign the restricted Takt admission staff role to gate helpers and use Ticket
check-in to verify a code before explicitly confirming admission. Check-in needs
an internet connection; camera images stay on the operator's device.

= Can I sell season or annual passes alongside single tickets? =

Yes. Use Club > Tickets to open a WooCommerce ticket offer. Select Season pass
or Annual pass, set its fixed validity dates and choose up to 200 included public
matches or events. WooCommerce handles the one-time payment; Takt does not create
a subscription or automatic renewal. The final validity date includes the whole
day in the website's time zone recorded at purchase.

When Digital admission tickets is enabled, each purchased unit receives one code
that can be admitted once at each included event. Changing the product does not
change existing purchases. Current event status and dates are checked again at
admission; a cancelled event or a fixture moved outside the purchased period
does not silently extend the pass. Existing single-ticket codes remain valid
under their original rules. Refunds and order changes revoke affected units.

= Can visitors register for an event or join a waiting list? =

Yes. Enable registration for an individual event, choose its capacity and insert
the Event registration block. Each person confirms their email before a place
is allocated. A voluntary waiting list offers freed places for up to 24 hours.
Participants can cancel through their private email link. Organizers manage
private participant lists, exports and notices about event changes in WordPress.
Registration capacity is separate from WooCommerce ticket stock.

= Can events repeat while individual dates remain editable? =

Yes. Use Event series on a saved event to preview weekly or monthly occurrences,
up to 104 within two years. Apply only after reviewing the proposed changes.
Individual edits, past dates and events with participants or tickets are
protected. Shortening a series proposes cancellations; it does not delete pages.

= Can I import and export league tables? =

Yes. In Teams > League tables, open a table and use CSV import and export in the
Standings panel. Import UTF-8 CSV or TSV, optionally with a BOM, using comma,
semicolon or tab separators. Files may contain up to 256 KB and 100 club rows.
Use all these headers in any order:

`name,played,won,drawn,lost,goals_for,goals_against,points,form,is_club`

Use whole numbers, including zero. Match counts range from 0 to 999, goals from
0 to 9999 and points from -9999 to 9999. Set is_club to 1 for your club or 0 for
another club. Form may be empty or use W, D and L; existing legacy codes are
preserved. File order determines the ranking, and official points are retained.

Preview does not save anything. After reviewing all rows and fixing any errors,
choose Use these rows, then Update/Save in WordPress. Discarding a preview keeps
the editor unchanged. Download saved table exports only the last saved rows.
Formula-like names are escaped with an apostrophe for spreadsheet safety;
literal leading apostrophes are doubled, and import restores the original names.
Both operations require permission to edit that table and a table-bound nonce.
Uploaded files are not added to the media library.

== Changelog ==

= 2.0.3 =

* Prefix plugin-owned renderer/pattern variables without changing saved blocks or rendered markup.
* Use native SQL identifier placeholders and explicit registered series hooks; cache module inventory with native post-change invalidation and uncached failure recovery.
* Validate submitted field shapes and values at form boundaries before using or saving them; reject malformed and incomplete submissions while preserving existing values.
* Require an event-bound session nonce and event editing permission before opening private participant lists.
* Preserve public calendar subscriptions, filters and pagination without expiring links; retain independent visibility checks for protected content.
* Retain existing content, settings, participant records, orders and ticket rights without a database migration or reimport.
* Document narrowly scoped checker exceptions for required transactional/private-table operations and native metadata queries; preserve freshness, permissions and data validation.

= 2.0.2 =

* Make request authorization and field validation explicit at each form boundary, including equivalent cases from the manual review.
* Keep WordPress block attributes and rendered inner blocks in their native output contexts; preserve plain-text ticket links and calendar exports.
* Handle registration and ticket storage failures explicitly, preserve signing keys and erasure retries, and coordinate simultaneous series changes, registrations and ticket issuance.
* Prevent gallery shortcode prefix collisions and stale or non-public music playlists, including sites with persistent object caches.
* Respect protected event, standings, release-block and REST metadata output while retaining authorized editor previews. Preserve import passwords and existing target visibility, and stop required imports or media suggestions on storage errors.
* Stop explicitly requested data removal on detected inventory, deletion or private-table errors before removing private storage options.
* Retain existing content, settings, registrations, orders, ticket rights and all 16 locales without a setup rerun or reimport.

= 2.0.1 =

* Harden request methods, permissions, nonce handling and typed form validation; reject malformed or incomplete submissions before changing saved content and settings.
* Enqueue registration-page styles and apply output handling for HTML, player embeds, native blocks, plain-text ticket links and calendar responses in their correct contexts.
* Exclude private and unavailable person profiles from public lineups and timelines while retaining saved assignments.
* Preserve existing customer content, module choices, media, registration records and ticket access; retain all 16 bundled locales.

= 2.0.0 =

Local release candidate prepared for review; this preparation does not publish a WordPress.org update.

* Require WordPress 7.1 or later; the PHP minimum remains 8.1. Update WordPress before installing Takt Site Features 2.0.
* Add club history layouts, season reviews with deliberately saved historical squads, and club organization with reusable people, responsibilities and nested groups.
* Add Club TV with an editorial video spotlight, a paginated category archive and a dedicated administration view for existing video posts and Club TV pages.
* Respect each supported embed's click-to-load choice; ordinary ready players need one Play action and do not autoplay. Retain existing explicit privacy choices.
* Add finite event series with change previews and exception protection, plus optional verified registrations, capacity management and waiting lists.
* Add Club > Tickets for existing WooCommerce ticket offers and match purchase channels without reclassifying unrelated products.
* Retain single tickets and add season and annual passes paid once, with fixed validity dates, explicit included events, immutable purchase snapshots and one admission per event and purchased unit.
* Add optional digital QR issuance and restricted check-in with atomic admission, refund handling and customer ticket access; keep digital issuance off until explicitly enabled.
* Preserve customer pages, deliberately emptied content, existing logos and sample ownership on repeated Club Setup; extend only an explicitly identified navigation menu.
* Preserve saved content and ticket access across module changes, with explicit participant/admission retention and controlled multisite data removal.

= 1.0.3 =

* Add independent desktop, tablet and mobile minimum heights to the hero photo slideshow while preserving existing saved heights.
* Use the same mobile breakpoint for responsive height and the photograph's focal point.
* Preserve keyboard and touch interactions in embedded videos, audio players, forms and other interactive content inside a slideshow.
* Translate the new editor controls in all 16 bundled locales.

= 1.0.2 =

* Secure JSON-LD and block-comment output, enqueue admin assets only on their editing screens and include readable editor source.
* Align the public plugin and translation identity with Takt Site Features while preserving existing content and saved block names.
* Preserve music track and link lists containing quotes, backslashes and Unicode when saving.
* Keep theme-specific guidance on the plugin settings page.
* Add validated CSV league-table import with preview and saved-table export; preserve official order, negative points and spreadsheet-safe club names.
* Export unconfirmed match kickoffs as tentative date-only calendar events without a whole-day busy period; keep stable event IDs and cancelled or postponed states.
* Add logo-wall, editorial-card and featured-partner layouts with team, season and partner-level filters, optional descriptions and profile or website links.
* Add 14 languages through 16 WordPress locales, including Norwegian Bokmål, Finnish, Icelandic, Turkish, Greek and Polish; cover block editor controls and pattern metadata.
* Translate league form badges while preserving stored codes and legacy data.
* Parse localized album month names unambiguously and retain valid calendar days.
* Distinguish preferred-foot labels from layout alignment and audio players from football players.
* Respect website date/time formats in events, matches, the event administration list and new album titles.
* Correct event administration and album date timezone conversions while preserving stored data and machine-readable dates.
* Replace the remaining fixed club-contact city with an editable, translatable placeholder.

= 1.0.0 =

* Make the complete feature set part of the free Takt product.
* Remove license controls, Marketplace entitlements and private update delivery.
* Preserve customer content and retire cached private update jobs safely.
* Provide optional Takt presentation controls while retaining existing theme-mod values.
* Keep the full club, music, album, event, importer and optional fan-shop workflows.
* Protect private player profiles from public jersey personalization requests.
* Add editable Ticket Corner pages and simultaneous club-shop/Ticketcorner ticket channels.
* Refine match cards, visitor information, ticket availability and archive filters.

== Upgrade Notice ==

= 2.0.3 =

Requires WordPress 7.1 and PHP 8.1. Refines form validation and private participant-list access. Existing content, settings, registrations and ticket rights are retained; no setup or reimport is required.

= 2.0.2 =

Requires WordPress 7.1 and PHP 8.1. Refines request validation and output handling following manual review. Existing content, settings, registrations and ticket rights are retained; no setup or reimport is required.

= 2.0.1 =

Requires WordPress 7.1 and PHP 8.1. Hardens form validation, permissions, nonces and output handling. Existing content, settings, registrations and tickets are retained. No setup or reimport is required.

= 2.0.0 =

Requires WordPress 7.1. Adds Club TV, season reviews, registrations and ticket offers. Existing content, single tickets and module choices remain. Passes are paid once, expire on a fixed date and never renew automatically. Digital issuance is opt-in; test checkout and admission before selling.

= 1.0.3 =

Adds optional responsive slideshow heights and protects embedded media and
form controls from slideshow gestures. Existing saved content and heights are
retained; no setup or reimport is required.

= 1.0.2 =

Adds standings CSV preview/export, regional translations and dates, richer
partner layouts and corrected tentative calendar events. Existing content,
saved menus and module choices are retained. Review CSV rows before applying
and saving them.

= 1.0.0 =

The complete feature set is now free. Existing content and module settings are
retained; license checks and private updates are retired.

== Resources ==

Plugin code and original design: Arber Gashi, GPLv2 or later.
Barlow and Barlow Condensed: The Barlow Project Authors, SIL Open Font License 1.1.
Full font license and sources: assets/fonts/LICENSE.txt and assets/fonts/OFL.txt.
Original demo images and documented CC0 image: assets/demo/CREDITS.txt.
QR generation: Project Nayuki QR Code generator 1.8.0, MIT license retained
in assets/vendor/qrcodegen/qrcodegen.js. Source, version and checksum:
assets/vendor/qrcodegen/README.txt.
Local camera decoding: jsQR 1.4.0, Cosmo Wolfe and contributors, Apache-2.0.
License, pinned upstream source and checksum: assets/vendor/jsqr/.

== Source code ==

The complete, maintained PHP, JavaScript and CSS source is included in this
plugin. Edit the files in includes/, blocks/, patterns/ and assets/ directly.
Block editor sources are blocks/*/editor.js; their dependency declarations are
the adjacent editor.asset.php files. Admin scripts and styles are in assets/js/
and assets/css/. These files are shipped and executed as readable source:
there is no Takt JavaScript or CSS compilation, bundling or minification step.
WordPress supplies the wp.* JavaScript libraries declared as dependencies.
The two third-party QR libraries are unmodified upstream distributions. Their
README files link the exact source releases; they run locally without a CDN or
image-upload service and load only on the ticket sheet or admission desk.

The public plugin slug and translation domain are takt-site-features. The
bootstrap filename takt-pro.php, PHP namespace Takt\Pro, saved takt-pro/* block
names and takt_pro_* option keys are retained for compatibility with existing
sites. They do not identify a paid edition. Existing content and settings must
not be renamed or deleted when updating the plugin.
