=== Calendar² by BSquared ===
Contributors: bsquaredsoftware
Tags: events, calendar, event calendar, recurring events, venues
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 8.1
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A fast, simple events calendar for busy sites: events, venues, organisers, repeating events, and month, list and day views.

== Description ==

Calendar² gives a site a "what's on" section that readers can browse and editors can keep up to date without fuss. It's built for sites like a local news site, a venue or a community group that list hundreds of events a month and can't afford a slow calendar.

Editors get one clear box for the details that matter: date and time, cost, venue, organiser, website, status (for example canceled or postponed) and an optional repeat schedule written as a sentence ("Every week on Tuesday and Thursday, 10 times"). Readers get a month grid, a list and a day view at /events/, with search, category, venue and featured filters that work without JavaScript.

Events are ordinary WordPress posts, so featured images, revisions, comments, sitemaps and SEO plugins work as usual. Every date of a repeating event is stored in a small indexed table, so a calendar page reads a handful of rows instead of working out repeats on every page view.

**Features**

* Events, venues, organisers and event categories (each with an optional colour), under one "Calendar²" menu with its own user permissions.
* An event editor for the block editor and the classic editor: start and end, all day, timezone (the site's by default), cost as free text ("Free", "$15", "$15–$55"), venue (pick, search or add a new one), organiser, website, status and a "featured" flag.
* Repeating events: daily, weekly on chosen days, monthly (on a day number or, for example, "the third Saturday") or yearly, every N, ending never, after N times or on a date. You can skip individual dates.
* Month, list and day views, single event, venue and organiser pages, with schema.org event data for search engines.
* The `[calendar2]` shortcode to put a calendar on any page, and `[calendar2_upcoming]` for a short list of what's coming up.
* An iCal feed of upcoming events that readers can subscribe to, and "Add to calendar" links on each event.
* An events list in the admin that shows what's coming up first, with date, category, venue and source filters, Quick Edit for dates, cost and status, Duplicate, and bulk "Mark canceled" and "Feature".
* Category merging that keeps old category addresses working.
* A guided switch from The Events Calendar on the same site: a dry run, a private preview, the switch itself and a roll-back, with old event addresses and `[tribe_events]` shortcodes kept working.
* Importing events from another site that runs The Events Calendar, with WP-CLI (`wp calendar2 import tec-rest <url>`).
* Optional clean-up of past events after a number of days, and WP-CLI commands to rebuild and tidy the calendar.
* Personal-data export and erasure (Tools → Export/Erase Personal Data) for the contact details stored with submitted events.

Public event submissions and scheduled imports from other calendars (iCal, RSS, sites running The Events Calendar) are in Calendar² Pro, a separate plugin from the same team. Everything listed above is in this free plugin, with no limits and no account needed.

The plugin's interface is written in US English and ships with a British English (en_GB) translation.

== External services ==

Calendar² doesn't contact any service on its own. It makes outbound connections only when you ask it to, as described below.

* **Importing from a site running The Events Calendar** (`wp calendar2 import tec-rest <url>`): Calendar² reads that site's public REST API (`<url>/wp-json/tribe/events/v1/…`) at the address you give. The request identifies itself as `Calendar2/<version> (+https://bsquared.software)`; nothing about your site is sent. That site's own terms and privacy policy apply.
* **Event images during an import:** each event's image is downloaded from the source site into your Media Library (WordPress's own `media_sideload_image`). If an image can't be copied, the event shows it from the source site's address instead, so readers' browsers load it from there.
* **Photon (WordPress.com image CDN), opt-in:** only if you pass `--image-proxy=photon` to the import command, images that the source site blocks are fetched through `https://i0.wp.com/`, a service run by Automattic. [Terms of service](https://wordpress.com/tos/) · [Privacy policy](https://automattic.com/privacy/).
* **Links readers can follow:** "Add to calendar" and "Subscribe" links open Google Calendar (`calendar.google.com`), and venue addresses link to Google Maps (`google.com/maps`). Nothing is sent until a reader clicks. [Google Terms](https://policies.google.com/terms) · [Google Privacy Policy](https://policies.google.com/privacy).

The guided switch from The Events Calendar reads that plugin's data on your own site and makes no outside connections.

== Installation ==

1. Install Calendar² from Plugins → Add New, or upload the `bsquared-calendar` folder to `/wp-content/plugins/`.
2. Activate it.
3. Add events under **Calendar² → Add New**, and review **Calendar² → Settings**. Your calendar is at `/events/`.

If The Events Calendar is active, Calendar² runs alongside it without taking over its addresses. Go to **Calendar² → Migrate** when you're ready to move across.

== Frequently Asked Questions ==

= What happens to my events if I deactivate or delete the plugin? =

Deactivating never deletes anything. Deleting the plugin removes its events, venues, organisers, categories and settings only if you ticked "Delete all events, venues, organizers, categories and settings when the plugin is deleted" under Calendar² → Settings.

= Which timezone are event times in? =

Each event has a timezone, which defaults to the site's (Settings → General). All-day events are whole calendar days and appear on the same dates whatever the timezone.

= Can I move from The Events Calendar? =

Yes. Under Calendar² → Migrate, a dry run shows exactly what will happen, a private preview lets you check the result, and only then does the switch take over your existing events, venues, organisers and categories in place, keeping their IDs, images and addresses. You can switch back afterwards.

= Does it work with my theme? =

The calendar uses your theme's fonts, colours and buttons, with one accent colour you can set under Calendar² → Settings. It works with block themes and classic themes.

= Can visitors send in their own events? =

That's part of Calendar² Pro, which adds a submission form with a moderation queue. Without it, a page that holds the `[calendar2_submit]` shortcode shows nothing to visitors.

= Is Calendar² fast on a big calendar? =

That's what it's built for. Repeating events are expanded once into an indexed table, and calendar pages, search and the iCal feed read only the rows they show.

== Screenshots ==

1. Month view: multi-day events as bars, a colour dot per category, featured events starred, and ongoing events folded into one line per week.
2. List view with event images, grouped by month, with recurring events labelled.
3. A single event page: date and time, cost, venue with a map link, organiser and add-to-calendar buttons.
4. Search and filter from one bar: keyword, location and category.
5. The event editor: simple date and time fields, repeat rules in one row (here weekly on Mondays, 8 times), and venue and organiser pickers.
6. The events list in the admin: upcoming/past, source, category and venue filters, with dates, venues and repeat rules at a glance.

== Third-party data ==

The table that maps Windows time zone names (as written by Outlook and Exchange) to IANA time zones comes from the Unicode CLDR project's `windowsZones.xml`, used under the Unicode License v3. Copyright © 1991-2026 Unicode, Inc. The licence text is in `src/Import/Ics/WindowsZones.php`.

== Changelog ==

= 1.0.0 =
* First public release: events, venues, organisers and categories; repeating events; month, list and day views with search and filters; the `[calendar2]` and `[calendar2_upcoming]` shortcodes; an iCal feed; the admin events list with Quick Edit, Duplicate and bulk actions; the guided switch from The Events Calendar; WP-CLI import from another site running The Events Calendar; past-event clean-up; personal-data export and erasure; and a British English translation.
