=== ICS Calendar Pro ===
Contributors: room34
Donate link: https://icscalendar.com
Tags: calendar, iCal, iCalendar, ICS
Requires at least: 5.3
Tested up to: 6.7.1
Requires PHP: 7.4
Stable tag: 5.8.3.1
License: Copyright 2024 Room 34 Creative Services, LLC. All rights reserved. NOTE: ICS CALENDAR PRO IS **NOT** OPEN SOURCE. It may not be copied or used without a valid, paid license key, except with written permission from Room 34 Creative Services, LLC. Any other distribution or reuse is prohibited. Third-party libraries in the `vendors` folder are subject to their own license terms, contained therein.

Includes all features of the free ICS Calendar plugin, plus several additional calendar views, the easy-to-use Calendar Builder, ICS Calendar block for the Block Editor, ICS Events for managing events directly in WordPress, Customizer tools, and the Illustrations Library.

== Description ==

ICS Calendar Pro extends the capabilities of the free ICS Calendar plugin for WordPress with several new calendar views, the easy-to-use Calendar Builder, ICS Calendar block for the Block Editor, ICS Events for managing events directly in WordPress, plus the Illustrations Library. Learn more at [icscalendar.com](https://icscalendar.com/#features).

== Installation ==

== Frequently Asked Questions ==

== Screenshots ==

== Changelog ==

= 5.8.3.1 - 2025.02.10 =

* Fixed logic bug that was causing the **Event CSS Classes** filter in Calendar Builder to have no effect.
* Modified logic for **Default to list tab on mobile breakpoint** in Full view so it only applies on the initial page load and not on browser resize (e.g. when the user rotates their device).
* Updated embedded ICS Calendar to 11.5.4.1. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

_Note: Version 5.8.3 was withdrawn due to an issue discovered in ICS Calendar v. 11.5.4 a few minutes after its release._

= 5.8.2.2 - 2025.02.07 =

* Updated embedded ICS Calendar to 11.5.3.2. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

= 5.8.2.1 - 2025.02.06 =

* Updated embedded ICS Calendar to 11.5.3.1. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

= 5.8.2 - 2025.02.03 =

* Added new **Pagination Auto-cycle** option for Basic and List views. When the pagination feature is enabled, this will automatically cycle through the pages every 5 seconds. (Note: Any user interaction with the previous/next page links will stop cycling.)
* Added support for **Reverse** parameter in Basic view in Calendar Builder. (This parameter was already supported in Basic view; it was just missing from Calendar Builder.)
* Updated copyright to 2025.
* i18n: Updated translation strings. Added non-country specific translation files for German and Dutch.
* Updated embedded ICS Calendar to 11.5.3.1-beta-1. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

= 5.8.1.1 - 2025.01.28 =

* Updated embedded ICS Calendar to 11.5.1.3. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

= 5.8.1 - 2025.01.20 =

* Added **No Overlap** option for Full view. By default, concurrent events in the time grid (Day and Week tabs of Full view) display in an overlapping fashion. Turning on this option will prevent the overlap. Note: This change may not be optimal for narrow page layouts.
* i18n: Updated translation strings.
* Updated embedded ICS Calendar to 11.5.1.2. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

= 5.8.0.1 - 2025.01.08 =

* Updated embedded ICS Calendar to 11.5.1.1. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

= 5.8.0 - 2025.01.07 =

* Added license activation debugging tools. If you are unable to resolve license issues with the suggestions on the License tab, add `define('R34ICSPRO_LICENSE_DEBUG', true);` to your site's `wp-config-php` file, then try entering your license details again. The **License API request URL** will be displayed in an admin notice. Please include that URL in a [support request](https://icscalendar.com/support).
* Corrected release dates for versions 5.7.0.2 and 5.7.0.3 in `readme.txt` and `changelog.txt`.
* Rewrote description text for **Start Date** field in Calendar Builder, for clarity.
* Minor code refactoring.
* i18n: Updated translation strings.
* **Updated embedded ICS Calendar to 11.5.1.** See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version. _Note: ICS Calendar version 11.5.x includes numerous updates based on current best practices recommended for the WordPress Plugin Directory. Corresponding changes to ICS Calendar Pro code outside of the free version are not yet included here, but will be incorporated into the next update._

= 5.7.0.3 - 2024.12.14 =

* Updated embedded ICS Calendar to 11.4.1.2. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

= 5.7.0.2 - 2024.12.14 =

* Added `availability_only` shortcode parameter. _This feature is still an experimental work-in-progress, so it is not yet available in the Calendar Builder interface._
* Updated embedded ICS Calendar to 11.4.1.1. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.
* Bumped "Tested up to" to 6.7.1.

= 5.7.0.1 - 2024.12.06 =

* Vendors:
  * Updated embedded ICS Calendar to version 11.4.1 to revert a change introduced in version 11.4.0 (which was included in the Pro 5.7.0 update), that caused certain view-specific default values to override saved Calendar Builder parameters. (The identified issue was that "Count" was ignored in List view, but there may have been other similar issues.) 
* Miscellaneous:
  * Updated copyright/license verbiage in `readme.txt` and `ics-calendar-pro.php` to more explicitly emphasize that ICS Calendar Pro is not open source software.

= 5.7.0 - 2024.12.03 =

* Added `R34ICSPro::shortcode_defaults_merge_pro()` method to take advantage of new `r34ics_shortcode_defaults_merge` filter, introduced in ICS Calendar 11.4.0.
* Updated embedded ICS Calendar to 11.4.0.1-beta-1. Includes addition of new **Bypass nonce on AJAX requests** setting (see note below). See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

_**Note on AJAX nonce:** ICS Calendar AJAX loading uses a [nonce](https://developer.wordpress.org/plugins/javascript/ajax/#nonce), per WordPress best practices for optimal database security. (The nonce is not strictly necessary in this case, as the plugin's AJAX calls have only limited ability to interact with the database, and all AJAX POST data is validated and sanitized.) **In general we recommend leaving the nonce validation in place.** However, we have found that some caching plugins -- particularly LiteSpeed Cache -- may cache the nonce code with your page content, causing calendars to fail to load after the nonce expires. Turn on this setting to bypass ICS Calendar's AJAX nonce validation._

= 5.6.2 - 2024.11.18 =

* Added `class_exists()` check in all class files.
* Calendar Builder layout tweaks.
* Restored `R34CISPro::deprecated_feature_check()` call. Transients limit execution to once per week. Database queries only need to be run once (status is then stored in `wp_options`). Notices are dismissible.
* Standardized handling of all admin notices using `r34ics_deferred_admin_notices()` function, and modified some notices to be dismissible.
* i18n: Updated translation strings.
* Vendors:
  * Updated embedded ACF PRO to version 6.3.11.
  * Updated embedded ICS Calendar to 11.3.7. See `vendors/ics-calendar/changelog.txt` for details on additional changes in this version.

= 5.6.1.1 - 2024.11.14 =

* Removed call to `R34CISPro::deprecated_feature_check()` as the check for ICS Calendar Block (introduced in 5.6.0) can cause significant database activity if the transient isn't being saved properly. A new means of warning admins about the presence of the deprecated ICS Calendar Block will be added in a subsequent update.

= 5.6.1 - 2024.11.11 =

* i18n: Added Czech translations.
* Updated embedded ICS Calendar to 11.3.6.1.

= 5.6.0 - 2024.11.07 =

* **Deprecated the ICS Calendar Block,** and added **Convert ICS Calendar Blocks** to convert existing blocks. See note 1 below for more details. 
* Added `r34ics_admin_utilities_more` action.
* Added new **Load embedded ACF PRO early** setting. See note 2 below for more details.
* Fixed minor CSS issue with new ICS Calendar Pro admin header bar.
* Added forced deprecated feature check on install/update and shortened transient expiration on standard deprecated feature check from 1 week to 1 day, to ensure that notices about deprecated features appear quickly.
* Additional minor code refactoring.
* Updated embedded ICS Calendar to 11.3.5.1.

_Note 1, on ICS Calendar Block deprecation and the **Convert ICS Calendar Blocks** utility: The ICS Calendar Block was deprecated due to its reliance on ACF Blocks and significant performance issues we have observed with them in the Block Editor during WordPress 6.7 beta testing. The utility allows you to find all instances of ICS Calendar Block throughout your site, quickly convert them to saved calendars in Calendar Builder, and replace the block in your posts and pages with the corresponding new Calendar Builder shortcode. The plugin also runs an auto-detection of existing ICS Calendar Blocks and displays an admin notice if you need to run the utility. _ICS Calendar Block will be removed entirely in version 6.0._ We expect to introduce a new option for the Block Editor in a later 6.x point release. (The *Convert ICS Calendar Blocks** utility is not displayed if the site has the Classic Editor plugin active.)_

_Note 2, on **Load embedded ACF PRO early** setting: Version 5.4.3.1 changed when the embedded ACF PRO loads, to avoid new warnings being added in WordPress 6.7, pertaining to the `load_plugin_textdomain()` function being called too early. (A large number of plugins and themes are affected by these new warnings.) Changing the loading sequence can have a cascading effect on other plugins and themes, resulting in various unpredictable issues. Turn on this new setting to revert ACF PRO to its previous loading sequence, which has resolved these issues for some users. Be aware that with this setting turned on, if you have `WP_DEBUG` set to `true`, WordPress 6.7 may begin displaying warnings, especially if your site is configured to use a language other than English._

= 5.5.0 - 2024.11.05 =

* Added ICS Calendar Pro admin header bar on all relevant admin pages.
* Fixed month/list toggle bug introduced with removal of cookie logic in version 5.4.3.1.
* Modified version-specific upgrade notices not to display on initial installation.
* Updated support links.
* i18n: Updated translation strings.
* Updated embedded ICS Calendar to 11.3.5.

= 5.4.4.3 - 2024.10.15 =

* Updated embedded ACF PRO version to 6.3.9. The 6.3.9 update includes an important security fix.
* Added logic to prevent direct access to ACF CPT editing pages when using the embedded version of ACF PRO.

= 5.4.4.2 - 2024.10.15 =

* This update addresses an issue with translation loading first introduced in version 5.4.3.1 (and free version 11.3.4.3). WordPress 6.7 adds a new warning message when the `load_plugin_textdomain()` function is called too early. Core team recommends not running this function at all, and instead relying on automatic just-in-time translation loading. However, after additional troubleshooting we have determined that the embedded ACF PRO requires the function to be called for some translations to load. We have adjusted both this function call and the `R34ICSPro::acf_init()` method call to be on the `init` action with extremely low priority values, to ensure that they run as early as possible. This arrangement appears to properly load translations without the 6.7 warning, while also loading ACF early enough for it to function properly. (We are working towards removing the embedded version of ACF PRO altogether, which is currently slated for version 6.0.0.)
* Converted all hook-related closures in `ics-calendar-pro.php` to named functions.
* Updated embedded ICS Calendar to 11.3.4.4.

= 5.4.4.1 - 2024.10.15 =

* ICS Events:
  * Fixed issues that were causing ICS Event category-specific calendars to incorrectly load all events, and also preventing Calendar Builder/ICS Calendar Blocks from loading the auto-complete Category dropdown.
  * Added method to use `r34ics_shortcode_feed_array_params` filter, and removed some related code that is no longer needed.
* Full View:
  * Added `r34icspro_fc_fixed_week_count` and `r34icspro_fc_show_non_current_dates` filters, to allow overriding FullCalendar.io's defaults for its [fixedWeekCount](https://fullcalendar.io/docs/fixedWeekCount) and [showNonCurrentDates](https://fullcalendar.io/docs/showNonCurrentDates) settings. These will be configurable options in a future update.

= 5.4.4 - 2024.10.10 =

* ICS Events:
  * Added Block Theme support to ICS Event archive (calendar landing page) and single templates.
	* Added "View Calendar" link under "ICS Events" in admin menu when **Generate calendar landing pages using view** checkbox is checked in ICS Calendar Settings.

= 5.4.3.1 - 2024.10.09 =

**Please note: Due to changes in the WordPress core version 6.7 betas, the ICS Calendar Block for Block Editor does not function reliably. We are currently investigating the issue. In the meantime, if you encounter problems, we recommend using Calendar Builder with a Shortcode block, rather than the ICS Calendar Block, or reverting to WordPress 6.6.x until the issue has been resolved.**

* Bug fixes and code refactoring:
  * Refactored code for reading saved calendar data to resolve `Undefined array key "hiddenonload"` PHP warning and other possible minor issues.
  * Refactored `R34ICSPro::display_calendar_args_params_merge()` and related methods to resolve `Uncaught TypeError: array_merge(): Argument #2 must be of type array, bool given` errors.
  * Refactored `R34ICSProEvent::acf_save_post()` method (as well as a few other instances of `get_post_meta()`). May resolve a PHP fatal error under certain circumstances when auto-saving ICS Events.
  * Removed `js.cookie.min.js` and all associated cookie logic. The use of cookies was very limited (saving the client-side status of certain toggle switches between page loads) and was not always working reliably, so the decision was made to remove them altogether.
  * Removed unnecessary `load_plugin_textdomain()` call, and set `$translate` input parameter to `false` on `get_plugin_data()` call, as these may cause PHP notices as of WordPress 6.7. See the [WordPress Trac](https://core.trac.wordpress.org/ticket/62154#comment:8) for more details. _Note: The explicit `load_plugin_textdomain()` call is still needed for the ICS Calendar Block (which uses ACF Blocks) to properly render translations in the Block Editor, so it is conditionally loaded when the `r34icspro_noblock` option is false._
* i18n:
  * Added missing translations for Illustrations Library and removed cookie-related text strings.
* Vendors:
  * Updated embedded ICS Calendar to 11.3.4.3.
  * Updated embedded ACF PRO version to 6.3.8.

= 5.4.3 - 2024.10.01 =

* ICS Events:
  * Added **Add an event** and **Edit event** buttons to archive and single event templates, visible only to users with `edit_others_posts` capability (Administrators and Editors).
  * Improved archive and single event templates. Note: Templates are currently being tested against the [Twenty Twenty-Four](https://wordpress.org/themes/twentytwentyfour/) and [Astra](https://wordpress.org/themes/astra/) themes, both with and without [Classic Editor](https://wordpress.org/plugins/classic-editor/).
  * Modified ICS Calendar options applied to the selected archive view to most closely match best use cases.
  * Removed some **Generate calendar landing pages using view** options that are not optimal for the current ICS Events functionality.
  * Fixed a bug that would cause the event's URL to always be the event page, even if a custom **Event URL** is set.
  * Implemented workaround for a bug that is preventing category calendar pages from loading when a custom **Calendar Page URL** is set. Currently always uses `/ics-categories/` in the URL path. This will be resolved in a future update.
  * _Feedback is welcomed._
* System Report:
  * Added new ICS Calendar Pro settings.
* i18n:
  * Updated translation strings.
* Vendors:
  * Updated embedded ICS Calendar to 11.3.4.2.

= 5.4.2 - 2024.09.28 =

* Admin:
  * Added Safari 18 layout bug CSS fix, based on the fix implemented in [Classic Editor 1.6.5](https://wordpress.org/plugins/classic-editor/#developers).
  * Changed status of Pro installation admin notice from `warning` to `info`.
  * Changed `flush_rewrite_rules()` (called on the Settings and Utilities page) to use `delete_option('rewrite_rules')` instead; `flush_rewrite_rules()` was failing to properly generate new rules due to when it was being called. See: [https://developer.wordpress.org/reference/functions/flush_rewrite_rules/#comment-4023](https://developer.wordpress.org/reference/functions/flush_rewrite_rules/#comment-4023). Also removed `flush_rewrite_rules()` call altogether from `R34ICSPro::purge_pro_calendar_transients()` because it should not be necessary there. 
* Customizer:
  * Added more (larger) options for text scaling.
* ICS Events:
  * Added error handling for cases where the event post is not published or has been deleted.
  * Added **Recurrence** column to admin index page.
  * Fixed issue that would prevent event pages from loading if the event occurred outside of the default date range (-90 to +365 days).
  * Fixed issue with sorting events by start/end dates on the admin index page.
  * Updated admin index page to display em dashes instead of current datetime when a saved event doesn't have start or end date/time set.
  * **Note:** Sorting updates to the admin index page may require a bulk edit and re-save of all existing events.
* Subscribe Link:
	* Replaced previous iCalendar-specific button with a floating menu allowing the user to select clickable links for Google Calendar, Apple iCalendar, Microsoft Outlook, or to copy the feed URL directly to their clipboard.
  * Placement of the **Subscribe** button now matches the **Legend Position** setting.
* Performance:
  * Added conditional to load the `R34ICSProEvent` class only if the ICS Events setting is turned on.
  * Added conditionals to only update `r34icspro_deferred_admin_notices` in the database when the queued notices have actually been changed. 
  * Removed plugin dependency check logic in `ics-calendar-pro.php`, as there are no longer any dependencies.
* i18n:
  * Updated translation strings.
* Vendors:
  * Updated embedded ICS Calendar to 11.3.4.1.

= 5.4.1 - 2024.09.24 =

* Search Filter:
  * Full and Masonry views are now fully integrated with the search filter, so hidden events are fully hidden and the calendar redraws as appropriate when the filter string changes or is reset.
* Miscellaneous:
  * Fixed possible PHP `undefined array key` warning caused by new `hiddenonload` option not being set for existing calendars.
  * Minor code refactoring.
* i18n:
  * Updated translation strings, including missing strings in some newer Calendar Builder features.
* Vendors:
  * Updated embedded ICS Calendar to 11.3.4.

= 5.4.0.1 - 2024.09.18 =

* Updated `nolink` functionality for Full view to match changes in ICS Calendar 11.3.3.2.
* Updated embedded ICS Calendar to 11.3.3.2.

= 5.4.0 - 2024.09.16 =

* Calendar Builder:
  * Added **Hidden on Load** option to allow controlling which calendar feeds are turned on or off on the initial page load. Redesigned layout of **ICS Calendar Feed(s)** section to accommodate the additional field and revised content of the associated help bubble.
  * Minor CSS enhancements.
* Illustrations Library:
  * Fixed bug that required custom keywords to be all-lowercase in order to match. Keyword matches are now entirely case-insensitive.
* i18n:
  * Updated translation strings.
* Miscellaneous:
  * Updated PHP requirement to 7.4 to match embedded ACF PRO requirement.
* Vendors:
  * Updated embedded ICS Calendar to 11.3.3.1.
  * Updated embedded ACF PRO version to 6.3.6.

= 5.3.3 - 2024.08.16 =

* Filters (Calendar Builder/ICS Calendar Block):
  * Modified callback methods to skip empty inputs, which could cause false matches.
  * Clarified help text for **Event CSS Classes** filter.
* Full view:
  * Added support for new **Open links...* (`sametab`) functionality. Support for this feature in other templates was added in 5.3.2.
  * Added CSS opacity workaround for stacking issue with tall upward event hover boxes layering behind the `thead` row. For an explanation of why this works, see: https://stackoverflow.com/a/11742116
  * Removed `JSON_PRETTY_PRINT` in JSON encoding for Full view event data, to reduce file size on calendars with large amounts of data.
* Illustrations Library:
  * Fixed bug in keyword matching due to `strip_tags()` causing words to occasionally run together if descriptions contain HTML tags.
* Block Editor:
  * Fixed an issue with duplicate IDs (`$args['guid']`) when duplicating an ICS Calendar block in the Block Editor, which could prevent all but the first calendar from rendering on the front end. (Note: The current fix appends a counter value to the ID on the front end only; it does not modify the value saved within the Block Editor.)
* i18n:
  * Updated translation strings.
* Miscellaneous:
  * Moved older changelog entries to new `changelog.txt` file.

= 5.3.2 - 2024.08.09 =

* Added **Disable front-end cookies** option on Settings page. By default, ICS Calendar Pro generates simple front-end cookies to remember the state of toggle checkboxes between page loads. No identifying information is tracked, and the cookies expire with the browser session. Check this box if you do not need this functionality and would prefer not to store these cookies.
* Modified Calendar Builder to support `sametab` functionality changes in ICS Calendar (free version). The previous checkbox for opening all links in the same tab has been replaced with **Open links...** radio buttons, with three options corresponding to the three new values for `sametab`.
* Minor block editor CSS adjustments.
* Removed stray comma in `R34ICSPro::admin_pro_plugin_action_links()` to address an edge-case PHP parsing error.
* Reverted change to conditional logic for events spanning two days, matching reversion in ICS Calendar (free version) 11.3.3.
* Updated embedded ICS Calendar (free version) to 11.3.3.

= 5.3.1.1 - 2024.07.23 =

* Fixed a bug in 5.3.1 that would cause valid annual licenses to be read as expired.
* Modified functions that check expired licenses not to run on AJAX calls.

= 5.3.1 - 2024.07.22 =

**Customizer note:** We have observed that the "Customize" admin menu link no longer directly opens the ICS Calendar Pro panel in the Customizer, and have determined this is due to an identified [bug in WordPress core](https://core.trac.wordpress.org/ticket/61561) that is currently slated to be patched in WordPress 6.7. The code in ICS Calendar Pro will therefore be left as-is, and the link should function properly again after WordPress core has been updated.

* Calendar Builder:
  * Added **View** and **Feeds** columns to admin index to make saved calendars easier to identify in the list.
* Full View:
  * Added missing support for **Fix Redundant Events** (`fixredundantuids`) and, more generally, the `r34ics_display_calendar_filter_ics_data` filter. Bear in mind if you are using this filter that the array structure for Full view differs significantly from all other views, so the logic in your filtering function must be adjusted according to the view.
* ICS Events:
  * Added custom slug option for ICS Events calendar landing page.
* License:
  * Refactored license verification method to prevent it from running multiple times per page request, and to save a transient value even when `false`. This should resolve a rare situation where WP admin performance is severely affected when the site cannot connect to the ICS Calendar Pro license API server.
* Up Next View:
  * Enabled the **Start On** and **Past Days** settings, with the latter defaulting to 0. See v. 5.3.0 changelog about **Limit Days** for more details.
* Bug Fixes:
  * Added conditional to prevent intermittent fatal errors with `R34ICSProLicense::puc_init()`.
  * Fixed bug with **Past Days** in Full view.
  * Fixed issue with admin notice handling change in version 5.3.0, that might cause admin notice text to display on the front end when loading calendars via AJAX.
  * Resolved an issue that was preventing the **Illustrations Library** from loading when Advanced Custom Fields (free version) is installed on the site.
* Deprecated Features:
  * Added mechanism for removing the deprecated Grid view in the upcoming 5.5 update, and automatically rendering all Grid view calendars in Full view, with week and day tabs. (This provides approximately compatible features with the existing Grid view, plus it adds new capabilities and will continue to receive updates.)
* Miscellaneous:
  * Changed names of settings actions to replace `admin_options` with `settings` for consistency with changes in 11.3.2.
  * Updated r34icspro_install() to re-install r34icspro-no-acf.php if applicable. (Needed for Illustrations Library fix noted above.)
* i18n:
  * New and updated translation strings. Corrected some errors in Italian and French.
* Vendors:
  * Modified check for ICS Calendar (free) to automatically deactivate it, rather than displaying an admin notice instructing the user to deactivate it manually.
  * Updated embedded ICS Calendar to 11.3.2.1.
  * Updated embedded ACF PRO version to 6.3.4.
  * Updated embedded FullCalendar version to 6.1.15.

= 5.3.0 - 2024.07.11 =

* Admin:
  * Updated handling of admin notices to use our deferred notices mechanism throughout.
* Calendar Builder:
  * Added **Calendar Height** option for Full view, to allow for setting a maximum height for the calendar container. Calendars that exceed this height will have internal scrollbars. Useful with time grid tabs (week/day) in conjunction with the new **Show All Hours** option, as this will cause the time grid to load snapped to the **Daily Start Time** instead of midnight.
  * Added **Show All Hours** option for Full view, to allow time grids to display the full 24-hour range but highlight the Start/End Times range. (Default behavior is to _only_ show those hours in the grid.) Corrected help bubbles for Start/End Times to reflect that default behavior.
* Developer:
  * Added clarifying comments for the conditionals in the `R34ICSPro::acf_init()` method.
* License:
  * Changed annual license renewal verbiage to steer users to the new **Renew** button on the [License Keys](https://icscalendar.com/my-account/api-keys/) page, rather than purchasing an additional license as in previous years.
  * Improved handling for edge cases where the site is unable to connect to our licensing server.
  * Updated language of some license-related error messages, and simplified instructions under the **Having trouble with your license?** heading on the License admin page.
* Up Next View:
  * Enabled the **Limit Days** setting, with a default of 30. (Prior versions had the limit hardcoded to 30.) This shorter default value was selected due to the common usage of this view with feeds that may contain a large number of recurring events daily; using a larger value for `limitdays` can cause severe performance issues with those calendars. However, calendars with a smaller number of events should be able to use a much larger value as needed.
  * Changed "No events found" message to "No events in the next 30 days." The number of days is dynamically inserted based on the **Limit Days** setting for the calendar; 30 is the default for this view as noted above.
* Widget View:
  * Fixed bug with **Empty Day Title/Empty Day Description** not working.
  * Added support for **Empty Day Background Color**.
* Miscellaneous:
  * Corrected release date for version 5.2.1 (2024.07.08) in changelog and other inconsistencies in structured comments in `ics-calendar-pro.php` and `readme.txt`.
  * Removed unnecessary and/or redundant `code-snippets.php` and `README.md` files, and reorganized file structure.
*i18n:
  * Updated translation strings.

= 5.2.1 - 2024.07.08 =

* Calendar Builder:
  * Fixed layout bug with certain help hover boxes introduced by changes in 5.2.0.
* ICS Calendar Block:
  * Changed default alignment to "wide".
* System Report:
  * Fixed multiple issues with list of saved calendars.
* i18n: Updated translation strings.
* Vendors:
  * Bumped embedded ICS Calendar (free) version to 11.3.2.

= 5.2.0 - 2024.07.03 =

* Illustrations Library:
  * Enhanced the existing **Event Illustrations** functionality to support managing a library of custom illustrations and keywords entirely within WordPress, with no coding needed. The new **Illustrations Library** admin page allows you to upload or select images from your WordPress Media Library and assign them to keywords. Then, any calendars that have the **Event Illustrations** option enabled for local images will automatically match keywords from the Illustrations Library and display the corresponding images as part of the event details in the calendar. Event Illustrations can still use the previous filter-based custom illustration path, or Google Calendar images if the source feed is a Google Calendar.
* Calendar Builder:
  * Reformatted HTML for help hover boxes from `<button>` tags to `<span>` tags and temporarily added `aria-hidden="true"` to make navigating the page with assistive technologies more manageable. This of course hides the help dialogs from assistive technologies, which is not the ultimate goal; further work is forthcoming on improving the accessibility of the Calendar Builder interface.
  * Removed "Beta" label on Up Next view, Filters tab items, and Event Illustrations.
* Full View:
  * Removed **Event Title Tag** and **Event Description Tag** options for Full view, since they are not applicable in that view and were breaking the UI. Added logic to force defaults on any saved calendars with bad values for these options.
* jQuery:
  * Replicated addition of `elem` parameter into `r34icspro_init()` function and `r34icspro_init_start` and `r34icspro_init_end` events, to match changes in ICS Calendar (free) 11.3.1. This allows for custom functionality to identify which calendar element fired off the event when the calendar was loaded via AJAX.
  * Moved the firing of `r34icspro_init()` function into the `r34ics_init_end` event to reduce possible unnecessary JavaScript execution.
* Miscellaneous:
  * Added new `r34icspro_get_saved_options()` and `r34icspro_is_google_calendar()` functions for specialized uses around Event Illustrations functionality.
  * Minor code refactoring.
* i18n:
  * New and updated translation strings.
* Vendors:
  * Bumped embedded ICS Calendar (free) version to 11.3.1.

= 5.1.1 - 2024.06.27 =

* Basic View:
  * Minor CSS tweak: removed `!important` from transparent background on events.
* Calendar Builder / ICS Calendar Block:
  * Layout refinements/CSS, particularly in the **ICS Calendar Feed(s)** table.
  * Rewrote description of **Pagination** field for clarity.
* Calendar Illustrations:
  * Added `r34icspro_calendar_illustration_keywords` filter to allow addition of custom keyword lists for calendar illustrations.
* Customizer:
  * Added [Rubik](https://fonts.google.com/specimen/Rubik) font.
* Miscellaneous:
  * Added new plugin settings to System Report.
* i18n:
  * Translation updates.
* Vendors:
  * Bumped embedded ICS Calendar (free) version to 11.3.0.1.

= 5.1.0.3 - 2024.06.22 =

* ICS Events:
  * Fixed date format bug that caused PHP fatal errors when site is configured to certain languages, e.g. German. (Switched two date function calls using PHP date formats from `r` to `c`.)
  * Rewrote `R34ICSProEvent::_get_ics_uid()` method to avoid potential `PHP Fatal error: Uncaught AssertionError` on some servers.

= 5.1.0.2 - 2024.06.15 =

* ICS Events:
  * Added action to purge ICS Calendar transients when saving an ICS Event.
  * Added option to select which view is used for the calendar/category landing pages.
  * Redesigned admin page with sortable start/end date columns and taxonomy filters.
  * Start/end date-time pickers:
    * Removed seconds.
    * Changed minute dropdown to 5-minute increments.
    * Added auto-complete of end date/time when setting start date/time.
  * Fixed bug with multi-day, all-day ICS Events ending one day early. (This is due to the iCalendar spec expecting `DTEND` to be the first date _after the event ends,_ rather than the last day on which it occurs.)
* Miscellaneous:
  * Fixed issue with `R34ICSPro::pro_views()` not properly updating the `R34ICSPro::views` property.

= 5.1.0 - 2024.06.14 =

* ICS Events:
  * **Introducing ICS Events!** ICS Calendar Pro now has the ability to create and manage events directly within WordPress, and to integrate these events into your calendars created with Calendar Builder or the ICS Calendar block. This feature is currently "beta" and is turned off by default. To use it, go to the ICS Calendar Settings and turn on the **Enable ICS Events** option.
* Calendar Builder:
  * Changed default feed timezone to match local site configuration, instead of always defaulting to Chicago.
  * Minor interface modifications.
* Admin:
  * Fixed jQuery issue that would force the admin page to flip to the "License" tab on load, even if the license is already activated.
  * Fixed jQuery issue that prevented clicking on links in ICS Calendar help bubbles.
  * Redesigned Settings tab with options grouped under subheadings.
  * Minor CSS fixes.
* Developer:
  * Added support for the new [`r34ics_display_calendar_event_item`](https://icscalendar.com/developer/#r34ics_display_calendar_event_item) filter in `R34ICSPro::_get_ics_json_events()`. _Note:_ Certain keys in the `$event_item` array are different for Full view than other views. For example, in most views the event title (the `SUMMARY` in ICS) is assigned to `$event_item['label']` but in Full view it is `$event_item['title']`.
  * Deprecated `r34icspro_is_calendar_builder()` function for new `r34icspro_is_r34icspro()` function. 
* Versions:
  * Updated embedded ICS Calendar version to 11.3.0.
  * Bumped "Tested up to" to 6.6.
* i18n: Updated translation strings.
* Hotfixes:
  * Temporarily removed "last" week-of-month option for ICS Events recurrences until logic issues are resolved.
  * Corrected WP option name `start_of_week` in code for generating `WKST` in recurrence rules for ICS Event CPT.
  * ICS Events date pickers now use site's configured `start_of_week`.

= 5.0.1 - 2024.06.07 =

* Versions:
  * Updated embedded ACF PRO version to 6.3.1.2.
  * Updated embedded FullCalendar version to 6.1.14. (Also added un-minified version to distribution, for easier diffs on future changes.)
  * Updated embedded ICS Calendar version to 11.2.3-beta-1.
  * Updated embedded Plugin Update Checker version to 5.4.
  * Bumped "Tested up to" to 6.5.3.

= 5.0.0 - 2024.05.30 =

**This version introduces a major change:** The free ICS Calendar plugin is now embedded in ICS Calendar Pro, so it is no longer necessary to keep ICS Calendar installed separately. Future updates to ICS Calendar Pro will always include the latest available version of the free ICS Calendar.

ICS Calendar Pro will first check to see if ICS Calendar is already installed separately, and if so, will use that version. But if it is not installed and active, the embedded version will be used. _However, we recommend deactivating and deleting ICS Calendar (free) to ensure that you are always running the embedded version, to ensure maximum compatibility with future ICS Calendar Pro updates._

Additional changes in this version:

* Full view:
  * Added `notranslate` CSS class to the container as a workaround, until a proper solution can be identified, for a conflict between the [FullCalendar.io](https://fullcalendar.io) library used by Full view and the [GTranslate](https://wordpress.org/plugins/gtranslate/) plugin. If you wish to have your calendars translated automatically by GTranslate, please use a different view. Bear in mind, automatic machine translations can produce inconsistencies and errors depending on context, and should be used with caution regardless of this specific issue. (For instance, when translating day name headers from English into French, the translation plugin interprets "SUN" as the word "sun", rather than an abbreviation for "Sunday", and translates it to "SOLEIL" instead of "DIM" or "DIMANCHE".)
* Month with Sidebar view:
  * Added support for new `fulldateintable` parameter.
* Calendar Builder:
  * Added **Cancelled Events** and **Tentative Events** options (under the **Advanced** tab) to support new parameters added in ICS Calendar 11.1.0.
  * Added **Event Local Time** option to support new `eventlocaltime` parameter in ICS Calendar 11.2.1. Note: Due to limitations in the FullCalendar.io library, Full view only displays timezone abbreviations in the event details hover box, not the main calendar grid. However, times shown do reflect the local event timezones.
  * Added **Full Date in Table** option for the new `fulldateintable` parameter introduced in ICS Calendar 11.1.1.
  * Excluded Month with Sidebar and Widget views from using **Filter (Event Search)** option until layout incompatibilities can be resolved. Also excluded Up Next, because this option has no logical use with that view. (This option was already excluded for Widget Availability and Year Availability because those views do not display specific event details.)
  * Moved **Extend Multi-day Events** to the **Advanced** tab.
  * **Removed** deprecated Grid view option, unless the new **Show deprecated options in Calendar Builder** setting is turned on, on the Settings page. Existing Grid view calendars will still function normally, but the setting must be turned on before making edits to those calendars.
* Miscellaneous:
  * Fixed un-minified `admin-script.min.js` file.
  * Removed `R34ICSPro::required_r34ics_version` and `R34ICSPRO_R34ICS_CRITICAL_VERSION` because they are no longer needed with embedded ICS Calendar.
  * Updated admin links on Plugins page.

= Full Changelog =

Please see `changelog.txt` for older logs.