== Groups by itthinx - changelog.txt

2026-05-29 - version 4.3.0
* Update - WordPress 7.0 compatible.
* Update - WooCommerce 10.8 compatible.
* Add - Added the Simplified Chinese translation.
* Update - Updated the translation template.
* Update - Updated the included translations.
* Dev - Revised Groups_User user object evaluation logic.
* Fix - Resolves potential issues with object-specific capability verification on non-primitive capabilities that require additional parameters.
* Dev - Revised capability evaluation to focus on known primitive capabilities.
* Dev - Added the groups_group_read_max_map filter.
* Dev - Added the groups_group_read_by_name_max_map filter.
* Dev - Performance optimizations on capability object handling.
* Dev - Performance optimizations on group object handling.
* Dev - Improved concurrency safeness with optimized group and capability object handling.
* Dev - Use existing group's name when declining to create homonymous group so case (in)sensitivity is explicit.
* Dev - Revised admin styles.
* Dev - Cache robot can be used to flush scheduled immediately.
* Dev - Fixed group, capability and user group constructor read fail would store false instead of null as underlying object property.
* Dev - Added the groups_cache_get_lock_timeout filter.
* Dev - Added the groups_cache_set_lock_timeout filter.
* Dev - Added the groups_cache_delete_lock_timeout filter.
* Dev - Added the groups_group_lock_timeout filter.
* Dev - Added the groups_capability_lock_timeout filter.

2026-04-17 - version 4.2.0
* Update - WordPress 6.9 compatible.
* Update - WooCommerce 10.7 compatible.
* Update - The Groups > Tree view now shows group IDs.
* Update - Include a notice on removal of legacy access control based on capabilities.

2026-03-24 - version 4.1.0
* Update - WordPress 6.9 compatible.
* Update - WooCommerce 10.6 compatible.
* Update - Resolves an issue that would render wrong post counts and all post statuses under Forums > All Forums with bbPress due to it altering the post_status of a query indiscriminately during the pre_get_posts action.
* Update - Using unlimited options for Tom Select UI control by default.
* Add - Added the groups_uie_render_select_display_limit filter.

2026-03-03 - version 4.0.0
* Update - WordPress 6.9 compatible.
* Update - WooCommerce 10.5 compatible.
* Fix - Fixes a fatal error due to missing resources when users with limited privileges access the dashboard sections related to Groups.
* Fix - Use consistent CSS class for confirmation with [groups_leave] shortcode.
* Dev - Use own namespace for selectize resources.
* Dev - Now applies .groups-selectize class to selectize wrapper.
* Add - Added Tom Select 2.5.2 build from https://github.com/itthinx/tom-select/tree/groups-tom-select
* Update - Using Tom Select by default as the UI control for select fields instead of Selectize.
* Update - Updated selectize.js to 0.15.2 build from https://github.com/itthinx/selectize.js/tree/groups-selectize
* Dev - Added the groups_uie_which_select filter.
* Dev - Avoid onboarding redirect to create product when filtering has no results in Products/All Products admin section.
* Update - Users who can edit posts must have access restriction rights to modify restricted posts.
* Update - Check users have access restriction rights to duplicate products (WooCommerce).
* Fix - Avoid a potential PHP Fatal error during groups_user_can filter processing when additional parameters cannot be unpacked.
* Fix - Avoid a PHP Deprecated notice where passing null to esc_url would pass it on to ltrim.
* Update - Improved cache handling, expiration and invalidation.
* Dev - Added the groups_cache_set_expires filter.
* Dev - Added the groups_cache_set_expires_indefinite filter.
* Dev - Added the groups_cache_robot_comment_groups filter.
* Dev - Added the groups_cache_robot_post_groups filter.
* Dev - Added the groups_cache_robot_term_groups filter.
* Dev - Added the groups_cache_robot_user_groups filter.
* Dev - Added the groups_cache_robot_flush_comment filter.
* Dev - Added the groups_cache_robot_flush_post filter.
* Dev - Added the groups_cache_robot_flush_user filter.
* Dev - Added the groups_cache_robot_flush_term filter.
* Dev - Added the groups_cache_robot_flush_all filter.
* Dev - Added the groups_cache_robot_flush_groups filter.
* Dev - Added lock for concurrent access resilience.
* Update - Added the internal lock API.
* Update - Added soft lock for general options access and modification.
* Dev - Added the groups_lock_path filter.
* Dev - Added the groups_lock_timeout filter.
* Dev - Added the groups_lock_sleep filter.
* Update - Made more resilient to dumb caches that do not invalidate updated options.
* Dev - Revised cache procedure for post counts.
* Dev - Revised cache procedure for eligible posts on previous/next.
* Dev - Added support for the GROUPS_CACHE_DEBUG constant to enable cache-related debug logging.
* Dev - Added support for the GROUPS_DEBUG constant.
* Update - Added the log API.
* Dev - Revised logic for switch_to_blog and restore_current_blog.

2026-01-13 - version 3.11.0
* Update - WordPress 6.9 compatible.
* Update - WooCommerce 10.4 compatible.
* Fix - [CVE-2026-0549] Prevent potential stored XSS via shortcode.
* Update - The [groups_join] shortcode limits functionality to authors with permission to restrict access.
* Fix - Fixed a warning when an invalid group is passed to the [groups_join] shortcode.
* Update - The [groups_leave] shortcode limits functionality to authors with permission to restrict access.
* Fix - Fixed a warning when an invalid group is passed to the [groups_leave] shortcode.
* Dev - Replaced uses of parse_url() with wp_parse_url().
* Update - The [groups_group_info] shows user display_name instead of user_login when listing users and supports the none attribute.
* Add - Adds the groups_verify_nonce() API function.
* Add - Adds the groups_verify_post_nonce() API function.
* Add - Adds the groups_verify_get_nonce() API function.
* Add - Adds the groups_verify_request_nonce() API function.
* Add - Adds the groups_sanitize_input() API function.
* Add - Adds the groups_sanitize_post() API function.
* Add - Adds the groups_sanitize_get() API function.
* Add - Adds the groups_sanitize_request() API function.
* Update - Legacy access restrictions phaseout: removed quick-create feature when block editor is used, removed show groups option.
* Dev - Revised input sanitation in remnant legacy code pending phaseout to use own API functions.
* Dev - Validation hints for WordPress.DB.SlowDBQuery.slow_db_query_meta_query in legacy code.
* Dev - Revised sanitation of the legacy options handling code pending phaseout to use own API functions.
* Dev - Revised input sanitation in controller for activation processing to use own API functions.
* Add - Adds the groups_get_current_url() API function.
* Dev - Unified instances of current URL obtention via own groups_get_current_url() API function.
* Dev - Revised pagination processing sanitation to use own API functions.
* Dev - Validation hints for WordPress.Security.ValidatedSanitizedInput.InputNotSanitized.
* Dev - Revised access meta box sanitation to use own API functions.
* Dev - Revised group admin screens sanitation to use own API funtions.
* Dev - Revised capability admin screens output escaping and sanitation to use own API funtions.
* Dev - Validation hints for WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedFunctionFound.
* Dev - Validation hints for WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound.
* Dev - Validation hints for WordPress.WP.EnqueuedResourceParameters.NotInFooter.
* Dev - Validation hints for WordPress.DB.SlowDBQuery.slow_db_query_meta_query.
* Dev - Improved code formatting.
* Dev - Revised options, welcome, notice processing sanitation to use own API functions.
* Dev - Revised posts etc. admin screens sanitation to use own API funtions, revised logic and removed unused declarations.
* Dev - Revised users and user profile screen sanitation to use own API functions.
* Fix - Revised instances of missing output escaping.

2026-01-05 - version 3.10.0
* Update - WordPress 6.9 compatible.
* Update - WooCommerce 10.4 compatible.
* Update - Updated blocks to API version 3 and iframe editor compatibility.
* Update - Improved the UI and UX of the Groups Member block.
* Update - Improved the UI and UX of the Groups Non-member block.
* Update - Groups Member blocks can be transformed into Groups Non-member blocks.
* Update - Groups Non-member blocks can be transformed into Groups Member blocks.
* Dev - Refactored the Groups Member block.
* Dev - Refactored the Groups Non-member block.
* Dev - Fixed React and Javascript issues in block implementations.
* Fix - Do not process mofile for unrelated domain in our controller's load_textdomain_mofile filter.
* Dev - Performance improvement to avoid redundant mofile determination when already processed.
* Fix - Solves infinite recursion issues with execution flows originating calls to our controller's load_textdomain_mofile filter for unrelated domains.
* Fix - Missing translations in blocks are loaded using script translation files.
* Update - Updated the translation template.
* Update - Updated included translations.
* Add - Added script translation files.
* Update - Using generic translation file for Portuguese.
* Update - Using generic translation file for Dutch.

2025-12-17 - version 3.9.0
* Update - WordPress 6.9 compatible.
* Update - WooCommerce 10.4 compatible.
* Dev - Avoid handling non-objects when processing term counts in the get_terms filter.
* Dev - Added translators comment.
* Dev - Validation hints for PluginCheck.Security.DirectDB.UnescapedDBParameter.
* Dev - Validation hints for WordPress.DB.DirectDatabaseQuery.DirectQuery.
* Dev - Validation hints for WordPress.DB.DirectDatabaseQuery.NoCaching.
* Dev - Validation hints for WordPress.DB.DirectDatabaseQuery.SchemaChange.
* Dev - Validation hints for WordPress.WP.AlternativeFunctions.rand_rand.

2025-10-31 - version 3.8.0
* Update - WordPress 6.8 compatible.
* Update - Requires at least WordPress 6.7.
* Update - WooCommerce 10.3 compatible.
* Update - Requires at least WooCommerce 10.0.
* Dev - Revised block script dependencies.
* Dev - Revised the join and leave shortcode processing logic.
* Dev - Added the groups_join_submit_max_time_delta filter.
* Dev - Added the groups_leave_submit_max_time_delta filter.
* Dev - Improved several instances of translatable strings.
* Update - Updated the translation template.
* Update - Updated the included translations.
* Update - Fixed instances of formal translations in the informal German translation set.
* Dev - Replaced use of DOING_AJAX with wp_doing_ajax().
* Dev - Replaced use of DOING_CRON with wp_doing_cron().
* Dev - Added validation hint to ignore requireOnce.fileNotFound due to false positives.
* Dev - Added validation hint to ignore include.fileNotFound due to false positives.
* Dev - Added validation hint to ignore includeOnce.fileNotFound due to false positives.

2025-09-08 - version 3.7.0
* Update - WordPress 6.8 compatible.
* Update - Requires at least WordPress 6.5.
* Update - WooCommerce 10.2 compatible.
* Update - Requires at least WooCommerce 8.5.
* Update - Improved the row action rendering in the Groups admin screen.
* Dev - Revised unused bits of code.
* Dev - Added the groups_admin_groups_query filter.
* Dev - Added the groups_admin_groups_results filter.
* Dev - Added the groups_admin_groups_columns filter.
* Dev - Added the groups_admin_groups_filters_fields_epilogue filter.
* Dev - Added the groups_admin_groups_filters_html filter.
* Dev - Added the groups_admin_groups_bulk_actions_fields_epilogue filter.
* Dev - Added the groups_admin_groups_bulk_actions_html filter.
* Dev - Added the groups_admin_groups_row_actions filter.
* Dev - Added the groups_admin_groups_row_actions_html filter.
* Dev - Added the groups_admin_groups_column_content filter.
* Dev - Added the groups_admin_groups_handle_action action.
* Dev - Added the groups_admin_groups_handle_action_submit filter.
* Dev - Added the groups_admin_groups_handle_action_confirm action.
* Dev - Added the groups_admin_groups_handle_action_reject action.
* Dev - Added the groups_admin_groups_handle_bulk_action action.
* Fix - Resolves performance issues with large sets of groups rendering using the group tree functions, as reported in https://github.com/itthinx/groups/issues/158
* Fix - Legacy column for capabilities collapsing.
* Add - Added info on contributing Bitcoin to support Groups development.

2025-08-20 - version 3.6.0
* Update - WordPress 6.8 compatible.
* Dev - Removed superfluous spaces in several translations.
* Dev - Removed superfluous spaces in code and text.
* Add - Added support for the class and submit_class shortcode parameters to the [groups_join] shortcode.
* Add - Added support for the class and submit_class shortcode parameters to the [groups_leave] shortcode.
* Fix - Fixed inappropriate class used for the container of the [groups_leave] shortcode.
* Update - A successful submission via the [groups_join] shortcode will cause a redirect to the current page so that the membership change is reflected.
* Add - Added the groups_join_submit_redirect filter.
* Update - A successful submission via the [groups_leave] shortcode will cause a redirect to the current page so that the membership change is reflected.
* Add - Added the groups_leave_submit_redirect filter.
* Dev - Instances of using proper API methods instead of supermagic properties to obtain data.
* Dev - Revised for PHPStan validation (rules via phpstan.neon).
* Dev - Updated Groups_User to provide expected return type Groups_Capability[] instead of string[] when asking for capabilities_deep.
* Dev - API improvement, added additional getters and setters to cache object, added key type checks.
* Dev - Revised and fixed several code formatting issues.
* Dev - Fixed instances of incorrect code documentation.
* Dev - Revised code documentation format where improper.
* Dev - Validation hints for verified property access (empty.variable).
* Dev - Validation hints for verified property access (property.notFound).
* Dev - Fixed potentially undefined variables.
* Dev - Added missing code documentation.

2025-04-20 - version 3.5.0
* Update - WordPress 6.8 compatible.
* Update - Requires at least WordPress 6.3.
* Update - Updated recommendations.
* Update - Updated description.
* Dev - Codesmetics.

2025-01-22 - version 3.4.2
* Dev - Removed unnecessary translation function calls.
* Dev - Revised some instances of missing output escaping.
* Dev - Added missing translators: comments.
* Dev - Replaced deprecated null parameter.
* Dev - Validation hints.
* Dev - Removed return type declaration for two actions.
* Fix - Fixed missing return value for a widget_categories_args filter.
* Fix - Fixed missing return value for a widget_categories_dropdown_args filter.
* Fix - Fixed optional return value declaration.
* Update - Updated the translation template.
* Update - Updated the included translations.

2024-12-29 - version 3.4.1
* Update - Declare WooCommerce HPOS compatibility.

2024-12-26 - version 3.4.0
* Update - WordPress 6.7 compatible.
* Dev - Security validation WordPress.DB.PreparedSQL.InterpolatedNotPrepared
* Dev - Security validation WordPress.Security.EscapeOutput.OutputNotEscaped
* Dev - Security validation WordPress.DB.PreparedSQL.NotPrepared
* Dev - Security validation audit.php.wp.security.sqli.input-in-sinks
* Dev - Security validation scanner.php.wp.security.rest-route.permission-callback.incorrect-return
* Dev - Security validation audit.php.wp.security.sqli.shortcode-attr
* Dev - Security validation audit.php.wp.security.xss.shortcode-attr
* Dev - Security validation scanner.php.wp.security.csrf.nonce-check-not-dying
* Dev - Security validation WordPress.Security.SafeRedirect.wp_redirect_wp_redirect
* Dev - Secuirty validation WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
* Update - Revised the review invite notification.
* Update - Updated the translation template.
* Update - Updated the included translations.
* Update - Added the "WC requires at least" header.
* Update - Added the "WC tested up to" header.

= 3.3.1 =
* WordPress 6.7 compatible.
* Adds fixes for "Translation loading for the ... domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. ..." PHP notices raised as of WordPress 6.7.0 in certain scenarios when translations are requested before the init or the after_setup_theme action have fired.
* Avoids a potential infinite recursion when evaluating post counts.
* Restrict the redirect to the welcome screen so it happens only when Groups is activated alone and not in bulk. Updates do not trigger a redirect. A legacy update does not trigger a redirect and now only causes an admin notice to be displayed temporarily.
* Updated the translation template.
* Updated the included translations.

= 3.3.0 =
* WordPress 6.7 compatible.
* Revised information and presentation of the welcome and add-ons sections.
* Revised the information provided in the readme.txt.
* Added several instances of missing output escaping.
* Using generic translations based on language (and form) when available.
* Updated the translation template.
* Updated the included translations.
* Revised several instances of code doc format.
* Added a lock icon for distinction on the Groups column header.

= 3.2.1 =
* WordPress 6.6 compatible.
* Updates script dependencies for blocks.
* Fixes blocks not available (regression bug in 3.2.0).
* Unified store used by blocks, avoids duplicate definition and console warning.

= 3.2.0 =
* WordPress 6.6 compatible.
* Revised Welcome screen.
* The option to show groups in user profiles is now enabled by default.
* Revised legacy option information.
* Updated the translation template.
* Updated the included translations.
* Revised the plugin tags.
* Adjusted the read restriction box to better fit its elements into its container.

= 3.1.0 =
* WordPress 6.5 compatible.
* Code doc corrections and revisions.
* Implements cautionary filter adjustments to avoid potential circular dependencies.
* Added resilience in user capability checks which depend on core scripts load order.
* Added checks to assure the existence of a Groups_User class method to avoid potential errors on install or update.
* Fixed an issue where removing access restrictions in bulk did not work due to a regression bug introduced in version 3.0.0.

= 3.0.0 =
* WordPress 6.5 compatible.
* The Grand Refactoring, Episode I. Properties, Getters, Setters.
* Added getters and setters to OPM classes.
* Fixed an error that could occur in certain processing flows when wp_get_current_user() is not yet defined.
* Introduces own current user capability check class methods in Groups_User class for coherency.
* Replaced uses of the obsolete var keyword to declare class properties.
* Added several instances of missing code documentation.
* Revised needed code doc formatting.
* Replaced uses of the extract function with specific parameter handling.
* Removed the tests folder and script.
* Added output escaping to instances in code where it was missing.
* Updated the translation template.
* Updated the included translations.
* Extended capability handling methods for group and user objects with object and additional arguments.
* Refactored to access properties via methods.
* Fixed deprecated notice for null parameter when editing a group with no description.
* Fixed deprecated notice for null parameter when editing a capability with no description.
* Fixed backslashes rendered for some quoted characters in group names rendered with the [groups_groups] shortcode, added missing escaping.
* Fixed backslashes rendered for some quoted characters in group names rendered with the [groups_user_groups] shortcode, added missing escaping.
* Fixed several instances of code format issues, superfluous whitespace.
* Code doc corrections and revisions.

= 2.20.1 =
* WordPress 6.4 compatible.
* Fixes user counts per group all showing zero on the Users admin screen for the group filter.

= 2.20.0 =
* WordPress 6.4 compatible.
* Added compatibility plugin header fields.
* Added various missing code documentation.
* Fixed various code documentation formatting issues.
* Fixed several instances of missing documentation of return types.
* Removed bits of unused commented code.
* Revised update methods that do nothing.
* Adds support for the Navigation blocks, so that protected items are hidden from users who should not see them.
* Added filter to block_core_navigation_render_inner_blocks.
* Added filter to render_block and pre_render_block.
* Added the groups_post_access_filter_render_block filter.
* Added the groups_post_access_filter_pre_render_block filter.
* Added the groups_post_access_filter_block_core_navigation_render_inner_blocks filter.
* Fixed a PHP Deprecated notice on version_compare() when Groups is newly installed (PHP 8.x compatibility).
* Revised post count caching.
* Added the groups_user_is_member filter.
* Additions to API methods.
* Now updates the Categories widget post count to reflect the number of accessible posts for the viewing user, rendered as list or dropdown.
* Now updates the Categories block post count to reflect the number of accessible posts for the viewing user.
* Added the groups_post_access_filter_widget_categories_args filter.
* Added the groups_post_access_filter_widget_categories_dropdown_args filter.
* Added the groups_post_access_filter_get_terms filter.
* Added the filter groups_admin_user_profile_user_new_form_groups.
* Added the filter groups_admin_user_profile_user_register_groups.
* Added the filter groups_admin_user_profile_edit_user_profile_groups.
* Added the filter groups_admin_user_profile_edit_user_profile_update_groups.
* Added the filter groups_admin_users_restrict_manage_users_groups.
* Added the filter groups_admin_users_views_users_groups.
* Added the filter groups_admin_users_views_users_counts.

= 2.19.0 =
* WordPress 6.4 compatible.
* Requires at least WordPress 6.0.
* Requires at least PHP 7.4.
* Fixed creation of dynamic properties (PHP 8.2).
* Revised the group parent selection to show hierarchy and group names sorted when adding or editing a group.
* Fixed style and output escaping of the tree view.
* Revised the tree view and linking to group edit for authorized users.

= 2.18.0 =
* WordPress 6.1 compatible.
* WordPress 6.2-alpha compatible.
* Added the static exists() method to the Groups_Group class.
* Added checks on data used to restrict posts to avoid invalid group IDs.
* Revised the posts_where filter that restricts post access for resilience against invalid postmeta values.
* Fixed several instances of deprecated notices related to passing null where non-null values are required (PHP 8.x compatibility).
* Fixed the style of the Capabilities select container on the Groups admin screen.
* Fixed the style of the Groups select container on post admin screens and added a stylesheet for those.
* Moved inline styles to stylesheet for the user admin screen and improved appearance of the group selection fields.
* Revised several parts of code to fix documentation and format issues.
* Revised the capability admin screens to add, edit and remove capabilities, improved code and fixed several instances of missing output escaping.
* Fixed the HTML for bulk capability removal and improved styling.
* Removed some instances of unnecessary translations.
* Supplemented several instances of missing code docs.
* Revised the group admin screens to add, edit and remove groups. Several code format improvements and fixes, and fixed instances of missing output escaping in related forms.
* Fixed selected capabilities were voided when creating a group via the group add admin screen failed.
* Fixed character escaping in parent selection on the group edit admin screen.
* Fixed a superfluous closing tag on the group remove admin screen.
* Removed several instances of unused code bits.

= 2.17.0 =
* WordPress 6.1 compatible.
* Fixes potential errors with inconsistent postmeta values obtained for groups protecting posts, using own API method which has been further guarded against inconsistent values.
* Revised code to use updated API method to obtain read access group IDs instead of accessing via get_post_meta().
* Fixed several instances of code formatting issues.
* Improves the performance on filtering out adjacent posts with sets of eligible post IDs cached by post type and avoids redundant queries.

= 2.16.2 =
* Fixes a PHP 8.1 warning related to the passing of a null parameter to version_compare().

= 2.16.1 =
* Fixes a parse error caused by a trailing `,`.

= 2.16.0 =
* WordPress 6.0 compatible.
* Fixed slashes appearing in term-related group names in the Groups column of the administrative screens for posts.
* Updated Groups menu position to straight integer for WordPress 6.x compatibility.
* Fixed use of undefined variable in legacy code.
* Add-Ons section updated.
* Revised Groups' menu icon.

= 2.15.0 =
* WordPress 5.9 compatible.
* Revised block titles and removed redundant "Block" part.
* Updated the German translation.
* Added German formal and informal translations for Germany, Austria and Switzerland.
* Updated the Spanish translation.
* Updated the French translation.
* Updated the Indonesian translation.
* Updated partial translations.
* Added clarification on applicable post type access restrictions.
* Revised notice on supporting Groups.
* Removed the option to show legacy settings unless already enabled, or showing is enabled via the GROUPS_SHOW_LEGACY_SETTINGS constant.

= 2.14.1 =
* Removed outdated changelog section info.
* Updated Add-Ons section and removed entry for subsumed integration.

= 2.14.0 =
* WordPress 5.8 compatible.
* Minimum WordPress version 5.5 is required.
* Updated block registration to hook on the block_categories_all filter instead of the depdrecated block_categories filter.
* Updated block scripts based on wp-scripts instead of cgb-scripts.
* Imporved block UX to avoid confusing style-toggling when a block is selected.
* Fixed slashes would appear in group names offered in block group selection.
* Improved groups and capabilities admin pagination appearance to show navigation items as buttons.
* Fixed Groups > Groups admin section search by group name issues with quotes and improper query escaping.
* Fixed Groups > Capabilities admin section search by capability name issues with quotes and improper query escaping.
* Fixed [groups_member] and [groups_non_member] shortcodes not handling group names with quotes correctly.

= 2.13.0 =
* WordPress 5.7 compatible.
* Removed unnecessary magic method overrides in Groups_Options (also eliminates PHP 8 warning for __wakeup()).
* Added missing scope declarations to Groups_Pagination methods.
* Fixed potential issues when creating a group programmatically indicating the group's parent ID.
* Code-formatting clean-up: trailing spaces.

= 2.12.0 =
* WordPress 5.6 compatible.
* Updated info on add-ons.
* Fixed checking menu items so that only those that are related to a post type are processed for access checking.
* Minor visual adjustments to UI controls to filter by groups on admin pages.
* Updated documentation links to https.

= 2.11.1 =
* Fixes missing capabilities with user_has_cap filter processing modified in 2.11.0.

= 2.11.0 =
* WordPress 5.5 compatible.
* Minimum WordPress version 5.2 is required.
* Fixed PHP 7.4 compatibility - Deprecated: Unparenthesized `a ? b : c ? d : e` is deprecated.
* Fixed protected entries appear on taxonomy archives when access restrictions for the Post type are not enabled.
* Fixed use of deprecated wp.editor and replaced with use of wp.blockEditor in Groups Member Block.
* Fixed use of deprecated wp.editor and replaced with use of wp.blockEditor in Groups Non-member Block.
* Added missing package.json etc. to Groups blocks sources.
* Block code reviewed, fixed formatting, added more documentation and cleaned up.
* Added classes to div wrappers that contain block content rendered.
* Modified the user_has_cap filter priority so that it kicks in as late as possible.
* Added the groups_user_has_cap filter which allows to further process after Groups has handled the user_has_cap filter.
* Fixed issues with backslashes displayed when part of a group or capability name.
* Added the groups_get_table_prefix filter.
* Fixed layout issues with the add-ons containers.
* Updated links to point to secure URLs where applicable.

= 2.10.0 =
* WordPress 5.4 compatible.
* Removed an alternative call to the deprecated wp_cache_reset() and preferrably calling wp_cache_init() when wp_cache_switch_to_blog() is not available.
* Fixed showing the Groups meta box to restrict posts on new post types which show access restrictions disabled in the options.
* Updated the add-ons section.

= 2.9.0 =
* WordPress 5.3 compatible.
* Added member counts displayed for each group under Groups > Groups.
* Fixed issues with and added missing internal code documentation mainly related to undocumented types.
* Guarded against errors in a utility function for comparison of capabilities when the comparison is made against non-objects.

= 2.8.0 =
* Added the Groups Members block: A block whose content is only visible for members of selected groups.
* Added the Groups Non-Members block: a block whose content is hidden for members of chosen groups.
* Removed use of parenthesis with require_once and include_once.

= 2.7.2 =
* Fixes an issue with page builders and front-end editing.
* Fixed CSS typo in UIE.
* Formatting improvements.
* Added missing escaping.

= 2.7.1 =
* Improved UIE rendering for group choices and made it more resilient to load dependencies, Javascript execution order and pages where it is used.
* Fixed UIE rendering for group choices with the block editor which would unduly cap the list visually providing an awkward UX.
* Better jQuery dependency resilience on the Users screen.

= 2.7.0 =
* WordPress 5.2 compatible.
* Fixed translation loading to apply the user's locale when set.
* Updated the German translation.
* Updated the Spanish translation.
* Updated the French translation (yet incomplete).
* Added the Indonesian translation.
* Updated the Swedish translation (yet incomplete).
* Updated the Brazilian Portuguese translation (yet incomplete).
* Updated the Dutch translation (yet incomplete).
* Updated the Lithuanian translatoion (yet incomplete).

= 2.6.1 =
* Improved the useability of group and capability selection dropdowns.
* Fixed clash between group filter and group action on Users admin screen.
* Added an option to filter the Users screen to match users who belong to all chosen groups.
* German translation updated.
* Spanish translation updated.
* French translation updated (yet incomplete).
* Updated the minimum required PHP version.

= 2.6.0 =
* Tested for WordPress 5.1.
* Added an option to filter by posts restricted by any group.
* Added an option to filter by posts restricted by no group.
* Removed an option to filter by only unrestricted posts which didn't work.
* Improved groups column header fitting on post admin screens.
* Fixed a notice when a user has no groups assigned.

= 2.5.0 =
* Tested for WordPress 5.0.

= 2.4.0 =
* Improved performance when filtering the users list by groups to avoid issues with large user bases.
* Tested with the latest WordPress 4.9.
* Updated the minimum required WordPress version to 4.6.
* Fixed a missing Javascript resource when selecting an image in the customizer.

= 2.3.1 =
* Fixed several points where warnings related to the use of count() and the Countable interface would occur due to changes in PHP 7.2.
* Tested with WordPress 4.9.
* Added the groups_post_access_posts_where_query_get_post_types filter to allow additional processing to cover for cases like where
  wc_query is set.
* Fixed a notice related to the use of an undefined variable in the Groups_Post_Access class.
* Added the logo and the option to get reminded later to the Groups notice.
* Added filters on get_previous_post_where and get_next_post_where to restrict access on adjacent posts.

= 2.3.0 =
* Tested with WordPress 4.8.
* Fixed a REST API access restriction issue, added the filter rest_prepare_{$post_type} to
  grant or deny access to individual posts.
* Updated the translation template.
* German translation updated.
* Updated the appearance of the network settings.
* Updated the table creation process dropping use of dbDelta() due to its restrictions (can't handle IF NOT EXISTS).
* Fixed an issue related to cache and switching to a blog when neither wp_cache_switch_to_blog() nor wp_cache_reset()
  are implemented, like in WP Engine's object-cache.php which does provide wp_cache_flush().
* Guarded against concurrent execution of multiple instances of plugin activation and deactivation processes.
* Fixed an attempt to refresh capabilities when no previous version was installed.

= 2.2.0 =
* Important change in this version: If access restrictions for post type are disabled, related entries will not be protected anymore.
* Improved the activation performance by simplifying the creation of user-group entries.
  The 'groups_created_user_group' action is not invoked on incorporating existing users and
  a single query is used to create entries for all users.
  Based on suggestions from @haroldkyle in https://github.com/itthinx/groups/pull/14
* Added a warning message displayed in the plugins list when Groups is going to delete its
  data on deactivation.
* Added the ability to obtain user_ids from Groups_Group.
* Improved the performance when obtaining users from Groups_Group.
  Based on suggestions from @tricki in https://github.com/itthinx/groups/pull/50
* Adjusted the signature of the Groups_User constructor to use null as default for its $user_id argument.
* Added methods in Groups_Post_Access to get and set which post types Groups should handle.
* Changed the default assumption to handle only post types that are 'public' by default. Others are not handled by default.
* Updated the Options to show all available post types.
* Improved performance by limiting our posts_where, wp_count_posts and other filters in Groups_Post_Access to handled post types only.
* Fixed a potential fatal error when the user_register hook is fired and get_current_screen() is not defined.
* Updated translations.
* Fixed a notice when no post types are selected in Groups > Options.
* Added comment filters to hide comments on protected entries.
* Improved the performance of the post filter.
* Added several performance improvements related to data retrieval and caching on various objects and data sets.
* Added a notice handler class.

= 2.1.2 =
* Fixed a warning that came up when the post type in a query is provided as an array indicating multiple post types.
* Users who can administer Groups (with the groups_admin_groups capability) now also see posts restricted to groups
  they do not belong to, in line with the ability to restrict access with groups they do not belong to for consistency's
  sake.
* Added a filter on woocommerce_product_is_visible so protected up-sell and cross-sell products
  are effectively hidden.

= 2.1.1 =
* Changed the default value for legacy mode used on installation to false. Fixes database errors
  due to missing capability table at that stage.
* Modified the method signature of Groups_Post_Access::posts_where() and
  Groups_Post_Access_Legacy::posts_where() to avoid PHP 7.1 warnings (reference expected, value given).
* Removed the administrator override option on the back end. Administrator override now requires the constant
  GROUPS_ADMINISTRATOR_OVERRIDE to be defined as true.
* Updated the French translation.
* Adjusted the load order for translations.

= 2.1.0 =
* Changed the requirements to allow to restrict by group.
* Fixed legacy access restrictions help replaced new groups help.

= 2.0.3 =
* Fixed a "Fatal error:  Call to a member function get_role_caps() on a non-object" which
  could occur in circumstances with invalid user IDs.

= 2.0.2 =
* Added the option to dismiss the Welcome screen.
* Updated German and Spanish translations.

= 2.0.1 =
* Fixed an issue with conflicting cache entries with legacy mode enabled.
* Fixed access restriction capabilities were reset when reenabling legacy mode.

= 2.0.0 =
* Changed the access restriction model to group-based access restrictions.
* Provides an optional legacy mode that supports the previous capability-based access restrictions.
* Optimized the approach to restrict read access on posts using groups rather than access restriction capabilities.
* Added the `groups_restrict_access` capability which grants users to impose access restrictions.
* Fixed the order_by and order parameters in Groups_Group::get_groups()
* Added the $create parameter in Groups_UIE::render_select()
* Removed the "Chosen" library.
* Improved and reduced the footprint on the Users admin screen, now allowing to filter by one or multiple groups.
* Added a welcome screen.
* Added the option to assign groups to new users directly when creating them from the Dashboard.
* Changed the language domain to string literal instead of constant.
* Improvements on internal coding standards (single/double quotes, EOF, formatting).

= 1.13.1 =
* Fixed an issue where the wrong post count would be produced for statuses that do not represent a valid WooCommerce order status.
* Added support for post counts with WooCommerce Subscriptions.

= 1.13.0 =
* Added a filter on wp_count_posts.

= 1.12.0 =
* Fixed an issue where resource paths were not correct with customized WP_CONTENT_DIR, WP_CONTENT_URL, WP_PLUGIN_DIR and WP_PLUGIN_URL.

= 1.11.3 =
* Updated the Spanish translation.

= 1.11.2 =
* Updated the translation template.
* Updated the German translation.
* Moved the complete changelog out to changelog.txt.

= 1.11.1 =
* Fixed the order_by and order parameters in Groups_Group::get_groups()

= 1.11.0 =
* Added the Brazilian Portuguese translation.

= 1.10.3 =
* Added the groups_access_restrictions_capability_selected filter.

= 1.10.2 =
* Tested for WordPress 4.5.

= 1.10.1 =
* Fixed the French translation which introduced incorrect markup breaking the help button.
* Added the groups_admin_groups_add_form_after_fields filter.
* Added the groups_admin_groups_add_submit_success action.
* Added the groups_admin_groups_edit_form_after_fields filter.
* Added the groups_admin_groups_edit_submit_success action.
* Fixed some code formatting (tabs).

= 1.10.0 =
* Adjusted the Groups and Capabilities screens' UI elements.
* Reduced the filters section footprint on the Groups screen.
* Reduced the filters section footprint on the Capabilities screen.
* Fixed use of deprecated constructor in the Groups_Pagination class.
* Fixed sorting by description and the sorting indicator on the Groups screen.
* Fixed sorting by description and the sorting indicator on the Capabilities screen.
* Fixed some code formatting issues including superfluous whitespace.
* Improved the footer rendering and footprint.

= 1.9.1 =
* WordPress 4.4 compatible.
* Updated selectize.js to 0.12.1 (standalone).
* Fixed a representation issue for the lower group selector on the Users screen.
* Updated the page headings to use h1 instead of h2.
* Added the is_member method to Groups_User.
* Updated the footer.

= 1.9.0 =
* Added own cache encapsulation to guard against flaws in outdated cache implementations.
* Added new user group property to obtain hierarchical groups.
* Improved user properties to use own caching.
* Fixed media field filters wrongly declared as actions.
* Fixed the version comparison operation.

= 1.8.1 =
* Fixed potential XSS vulnerabilities related to the unescaped use of the $_SERVER['REQUEST_URI'] in some forms.

= 1.8.0 =
* WordPress 4.3.1 compatibility tested.
* Add-ons section added.

= 1.7.2 =
* WordPress 4.3 compatibility tested.
* Updated the menu position constant (string instead of number).
* Removed translation of the Groups menu title (related to a consistent appearance and would also be affected by a a core bug).
* Fixed padding for the header checkbox on the Groups and Capabilities screens.

= 1.7.1 =
* Fixes an issue with map_meta_cap filtering where no valid post ID is provided.

= 1.7.0 =
* Added the French translation.
* Added the [groups_login] shortcode.
* Added the [groups_logout] shortcode.
* Updated the German translation.
* Updated the Spanish translation.
* Added the groups_deleted_capability_capability action.
* Fixed an issue with deleted capabilities restricting access to posts.
* Fixed cache entries for capabilities.

= 1.6.0 =
* Added the German translation.
* Updated the Spanish translation.
* Updated the Groups menu position.
* Removed empty strings from translation.

= 1.5.5 =
* Added administrative links to the plugin entry.

= 1.5.4 =
* Added the Dutch translation.

= 1.5.3 =
* Added a comparison method for groups and capabilities.
* Updated the documentation link in the help content.

= 1.5.2 =
* Improved internal definitions to use API function instead of WP_CONTENT_DIR
  and WP_CONTENT_URL constants.
* Now showing inherited capabilities for groups.
* Added ABSPATH check to plugin main file.
* Improved the UI rendering cancel links as buttons.
* Improved the UI adding some space on capability selector box.
* Fixed a pagination issue when the page number is indicated on the Groups or Capabilities screen.

= 1.5.1 =
* Please **MAKE A BACKUP** of your site and database PRIOR to updating.
* WordPress 4.2 compatible.
* Adopted a more flexible index size on the capability row of the capability table.

= 1.5.0 =
* Please **MAKE A BACKUP** of your site and database PRIOR to updating.
* WordPress 4.2 compatible.
* Reduced the index size on the capability row of the capability table.

= 1.4.15 =
* Due to changes in versions 1.4.14 and 1.4.15, it's important to **MAKE A BACKUP** of the site & database, test the site, extensions & theme PRIOR to updating.
* Fixes a cache incompatibility with caching mechanisms that do not implement wp_cache_get()'s function signature fully.
This addresses cases specifically where the fourth parameter $found is not initialized as expected upon return.
The performance improvements included in this release are lessened with caching plugins that fail to implement the return value disambiguation via $found.

= 1.4.14 =
* Now not using Groups' the_posts filter by default as results are already filtered by Groups' posts_where filter.
* Added the groups_filter_the_posts filter which can be used to 'reactivate' Groups' the_posts filter where needed.
* Added caching for capabilities read by capability name.
* Added caching for groups read by name.
* Added caching for results obtained in Groups_Post_Access::user_can_read_post(...).
* Added the groups_post_access_user_can_read_post filter.
* Admin override is disabled by default (existing installs need to disable manually if options were saved).
* Swedish translation by [Andréas Lundgren](http://adevade.com) added.

= 1.4.13 =
* WordPress 4.1 compatible.

= 1.4.12 =
* Fixes missing selectize Javascript for the media uploader's attachment popup.

= 1.4.11 =
* WordPress 4.0 compatible.

= 1.4.10 =
* Improved: code documentation
* WordPress 3.9 compatibility checked
* Changed some filter usage with prepare() for 3.9 nags.
* Fixed unmatched tags in the tree view.

= 1.4.9 =
* Fixed: Tree view doesn't appear/disappear in menu directly after setting the option.
* Improved: Feedback when options have been saved.
* Improved: UI size adjustments.
* Added: New API methods Groups_Group::get_group_ids() and Groups_Group::get_groups().
* Improved: groups and capabilities table cell titles and ellipsis added.

= 1.4.8 =
* Fixed: A closing tag in the group list on the user profile.
* Fixed: Help wording.
* Improved: Capabilities in the Access Restrictions column are sorted for more consistent display.
* Improved: Reduced ID, Edit and Remove column widths on Groups and Capabilities screens.
* Fixed: Stripping added slashes from groups and capabilities displayed.
* Added: Feedback when groups and capabilities are created, updated or removed in admin.
* Added: group and exclude_group attributes for the [groups_user_groups] shortcode.
* Improved: Replaced remnant CR LF line-endings in code.
* Fixed: Handling updates to a capability when the capability field is empty.
* Fixed: Handling updates to a group when the name field is empty.
* Fixed: Don't allow to use the name of another existing group when updating a group.
* Fixed: Don't allow to use the name of another existing capability when updating one.

= 1.4.7 =
* Security improvement: plugin files accessed directly exit

= 1.4.6.1 =
* Fixed: Don't interfere with output when there is no post (the_content and get_the_excerpt filters)

= 1.4.6 =
* Security fix : Certain capabilities could be granted to users instead of being denied with a change introduced in version 1.4.5. Roles with negated capabilities would effectively grant these capabilities to the user.

= 1.4.5 =
* Using a WordPress API function get_post_type_capabilities() instead of semi-hardcoded capabilities for access restriction checks (affects CPTs).
* Changed: Taking role-based capabilities into account when creating cache entries for the Groups_User object. The new groups_user_add_role_capabilities filter allows to modify this new behaviour by returning false.
* Added: groups_user_add_role_capabilities filter.

= 1.4.4 =
* WordPress 3.8 compatibility checked.
* Fixed: Access restriction options per post type when none is checked.

= 1.4.3 =
* Added: Bulk editing (add/remove) of post access restriction capabilities.
* Fixed: A typo in the Access Restriction column's tooltip text.
* Fixed: Validation of access restriction capabilities when saved on options admin screen.
* Changed: Users must now have the groups_access capability to be able to use the access restriction meta box on posts.

= 1.4.2 =
* Added: Access restriction capabilities shown for enabled post types on overview screens.
* WordPress 3.7.1 compatibility checked.
* Fixed: Error caused by typo when obtaining group_ids_deep property for a Groups_User.
* Changed: Replaced some __get calls by properties.
* Added: Filter by access restriction capabilities for enabled post types on overview screens.

= 1.4.1 =
* Added: Better group-assignment on the Users admin screen, allows to assign/remove multiple users to/from multiple groups along with a better UI.
* Changed: Groups requires at least WordPress 3.5 now, although this only affects the group-action functionality on the Users admin screen, the restrict_manage_users action which is now used to render the UI elements needed, was introduced with WordPress 3.5.
* Added: Extensions box in Options.
* Improved: Groups section in user profile with added description.

= 1.4.0 =
* Added: Groups > Groups > Add / Edit group screens, allow to assign/modify the capabilities assigned to the group.
* Added: Groups > Groups screen, allow to assign/remove multiple capabilities to multiple groups.
* Added: Groups > Groups screen, allow to delete multiple groups as a bulk action.
* Added: Groups > Capabilities screen, allow to delete multiple capabilities as a bulk action.
* Improved: Groups > Options screen, using searchable select instead of checkboxes to enable capabilities for access restriction.
* Improved: In user profiles, using a searchable select to modify group assignments.
* Improved: Reduced the footer text in groups admin sections.
* Improved: Admin CSS to make better use of screen real-estate and more coherent appearance with the new UI additions.

= 1.3.14 =
* Added the option to quick-create group and capability within the access restriction meta-box.
* Added the option to show groups granting access per capability in the access restriction meta-box.
* Added the quick-create field to the access restrictions meta-box which allows to create group & capability on the fly.
* Added [Selectize.js](http://brianreavis.github.io/selectize.js/) and using it in the access restrictions meta-box instead of checkboxes.
* Improved the Groups > Options screen using a Selectize-based selection of capabilities that are enabled for access restriction.

= 1.3.13 =
* Fixed duplicate postmeta created when saving access restriction capabilities for a post.
* [groups_can] and [groups_can_not] now accept multiple capabilities separated by comma.
* WordPress 3.6.1 compatibility checked.

= 1.3.12 =
* WordPress 3.6 compatibility checked.
* Fixed table appearance for capabilities and groups admin sections when there are no results.

= 1.3.11 =
* Fix: Access restriction capabilities must be disjunctive.
* Added: List of groups can be shown in user profiles on the back end and group assignments can be edited by group admins.
* Improvement: Groups shown for users on the Users screen are sorted by name.

= 1.3.10 =
* Fix: Under certain conditions with caching involved, capabilities were not correctly retrieved. Thanks to Jason Kadlec who [reported the issue](http://wordpress.org/support/topic/nasty-error-with-latest-version).
* Improvement: Related to the above fix, improved the way how *_deep properties are retrieved on cache misses, resulting in slightly better performance.
* Fix: Added a missing text domain.
* Improvement: Added help icon when user has no access restriction capabilities.
* Fix: Redirecting after group action in users screen to end up with a clean admin URL.

= 1.3.9 =
* Fix: added filter hooked on posts_where motivated by pagination issues - the posts must be filtered before the totals are calculated in WP_Query::get_posts().
* Improvement: modified the signature of the the_posts filter method in Groups_Post_Access to receive the $query by reference
* Improvement: a substantial improvement on overall performance is achieved by caching user capabilities and groups
* Fix: access restriction boxes showing capabilities that the user should not be allowed to set to restrict posts
* Fix: resolve user-capability when a capability is deleted

= 1.3.8 =
* Fix: using substitute wp_cache_switch_to_blog instead of deprecated function wp_cache_reset when available (from 3.5.0)
* Fix: don't show access restriction meta box on attachments, the option is added with the attachment fields (3.5 uses common post edit screen but save_post isn't triggered on attachments)
* Improvement: limiting choice of access restrictions to those the current user has
* Fix: restrict access to edit or delete posts based on the post's access restrictions
* Feature: added option to refresh capabilities
* Fix: replaced use of get_user_by() (memory leaks on large user sets) with query & added batch limit when adding users to Registered group on activation

= 1.3.7 =
* Fix: missing argument for meta box when saving a post
* Fix: Groups conflicting with other plugins adding columns to the Users screen (in the manage_users_custom_column filter) thanks to [Erwin](http://www.transpontine.com) who spotted this :)

= 1.3.6 =
* Replaced call to get_users() with query to avoid memory errors on activation with large users bases.
* Provided a default value for a method in Groups_Access_Meta_Boxes to avoid issues with other plugins or themes.

= 1.3.5 =
* Fixed out of memory issues with large user bases on Users > All Users page. Thanks to [Jason Glaspey](http://www.jasonglaspey.com) who spotted the issue :)

= 1.3.4 =
* WP 3.5 cosmetics

= 1.3.3 =
* WP 3.5 compatibility http://core.trac.wordpress.org/ticket/22262

= 1.3.2 =
* Fixed capabilities cannot be added or removed from groups in localized installations

= 1.3.1 =
* Added users property to Groups_Group
* Moved tests out of core folder
* Fixed missing $wpdb in Groups_Group's getter
* Added group filters on users admin section

= 1.3.0 =
* Added feature that allows to show access restrictions depending on post type
* Added support for access restrictions on Media
* Fixed issue, removed access restrictions offered on Links

= 1.2.5 =
* Added Spanish translation

= 1.2.4 =
* Minor improvements on Options screen
* Added show="users" option to [groups_group_info] shortcode which lists user logins for users in a group - rather experimental as it doesn't offer any sorting, pagination, linking or other options

= 1.2.3 =
* New shortcode [groups_join group="..."] lets a user join the given group
* New shortcode [groups_leave group="..."] lets a user leave the given group

= 1.2.2 =
* Revised styles
* WordPress 3.4 compatibility
* Dropping support for WordPress < 3.3
* Help uncluttered.

= 1.2.1 =
* Reduced files loaded on non-admin pages.
* Added Lithuanian translation.
* Changed help to use tabs.

= 1.2.0 =
* Access control is no longer restricted to the groups_read_post capability: now any capability can be used to limit access to posts so that different groups can be granted access to different sets of posts.

= 1.1.5 =
* Added shortcode & API functions [groups_user_group] / [groups_user_groups] that allows to show the list of groups the current user or a specific user belongs to
* Added shortcode & API functions [groups_groups]to show the site's list of groups
* Class comments.

= 1.1.4 =
* Reduced plugin admin footer.

= 1.1.3 =
* Added safety & warning to test page.

= 1.1.2 =
* Tested on WP 3.3.2

= 1.1.1 =
* Multisite: Fixed (removed) conditions that would only make Groups act on public and non-mature sites
* Multisite: Adding add/remove to group only on sites', not network users admin screen
* Multisite: Added constraint in user_register hook checking if the user is a member of the blog

= 1.1.0 =
* Added Groups menu to network admin
* Added option to delete plugin data for all sites on multisite installations; removed option for individual sites
* Improved activation and deactivation for network installs
* Increases column sizes on capabilities table and fixes cut-off capabilities delete_published_pages and delete_published_posts

= 1.0.0-beta-3d =
* Fixed issues caused by an excessively long index for the capability DB table.
Some installations wouldn't work correctly, showing no capabilities and making it impossible to add new ones.
* Taking into account blog charset/collation on newly created tables.

= 1.0.0-beta-3c =
* Groups shortcodes now allow nesting.

= 1.0.0-beta-3b =
* Fixed admin override option not being updated
* DB tables checked individually to create (motivated by case of all but capability table not being created)

= 1.0.0-beta-3 =
* Groups wouldn't activate due to a fatal error on WP <= 3.2.1 : is_user_member_of_blog() is defined in ms-functions.php
* Added [groups_group_info] shortcode

= 1.0.0-beta-2 =
* Increased length of capability.capability, capability.class, capability.object columns to support long capabilities.
* Improved admin CSS.

= 1.0.0-beta-1 =
* This is the first public beta release.
