Hub#16
Open
kimo-works wants to merge 47 commits into
Open
Conversation
- show correct message after saving plugin license key - fixed message being visible twice
The hub system centralizes license checks into a single API request, reducing calls from 20+/day to 2/day. It supports both global license keys (for All Access, List Add-ons, Agency plans) and per-plugin keys (for Single Add-on plans), with auto-migration from legacy keys. New admin interface includes a tabbed settings page and a hub catalog page with modern card layout. Added caching with 12-hour TTL, stale fallback, and concurrent request locks. Updated LicenseHandler to use hub cache for validation. Added plan types constants and utilities.
Switches CSS and JS paths from unminified to minified variants for improved performance.
Refactor admin menu registration to detect Gravity Forms availability and provide top-level menu fallbacks, ensuring GravityWP pages remain accessible regardless of Gravity Forms installation status. Adjusts priorities to maintain proper menu order.
Consolidate the GravityWP admin experience into a single unified page (Registry) and implement automatic migration for legacy license keys. - Refactor `Global_License_Key_Registry` to serve as the primary unified admin page, combining the catalog (Hub) and license settings. - Implement automatic migration of legacy per-plugin license keys from v2.0.x addon settings to the new v2.1.0 centralized storage. - Update `LicenseHandler` to support a multi-stage resolution order: individual keys, global keys, and legacy keys. - Refactor `Hub_Page` to act as a helper class for rendering plugin cards rather than a standalone page. - Update admin assets (CSS/JS) to support the new unified UI components, including a premium hero section and improved tab navigation. - Adjust `Global_License_Key_Loader` to reflect the new component loading order and dependency structure.
Improve the robustness of the legacy license key migration process and refine the Hub interface with better status indicators and dynamic purchase links. - Implement a dual-method legacy key scan in `Hub_Manager`: - Scan via registered addon handlers for active plugins. - Perform a direct database scan of Gravity Forms addon settings to capture keys from inactive plugins. - Update `LicenseHandler` to maintain backward compatibility by allowing users to view/edit individual keys while providing clear status information regarding Global License coverage. - Enhance `Global_License_Key_Registry` to display "Via Global" status and appropriate icons when a plugin is covered by a global key instead of an individual one. - Refine `Hub_Page` to use dynamic purchase URLs from the catalog and display conditional buttons/pricing for free vs. premium add-ons. - Update API endpoints to point to the staging environment for testing. - Increment `Hub_Manager::CACHE_VERSION` to `2.2.0`.
Remove the "Overview" tab and its associated statistics rendering from the `Global_License_Key_Registry` to simplify the Hub interface.
Introduce a new AJAX-driven workflow for installing, activating, and deactivating plugins directly from the Hub interface. This replaces the previous browser-download method with a seamless, in-place UI update. - Add `Hub_Ajax` class to handle `admin-ajax` requests for plugin actions. - Implement `initHubActions` in `gwp-admin.js` to manage asynchronous button states and error handling. - Add CSS for loading states and action status messages. - Refactor `Hub_Page` to use a unified `render_card_footer_html` method compatible with both initial server-side rendering and AJAX responses. - Update `Global_License_Key_Loader` to include the new `Hub_Ajax` component in the initialization sequence. - Localize AJAX endpoints, nonces, and translatable strings to the admin JavaScript environment.
Introduce support for displaying plugins with "coming-soon" and "in-development" statuses within the Hub interface. - Update `Global_License_Key_Registry` to categorize plugins by lifecycle status. - Add dedicated UI sections and styling for upcoming and developing plugins. - Implement specialized card footers in `Hub_Page` to provide context-aware information (e.g., "Learn more" links for upcoming products). - Enhance CSS to include status-specific color coding and visual indicators.
Transition the plugin card UI from displaying lifecycle statuses (coming soon, in development) to displaying descriptive source badges based on the user's license plan. This provides clearer context regarding how a plugin is unlocked. - Remove CSS and logic related to 'coming-soon' and 'in-development' statuses. - Implement `resolve_source_badge` in `Hub_Page` to map access sources to specific plan labels (All Access, Agency, List Add-ons, Single Add-on, Free). - Update `Global_License_Key_Registry` to pass the `global_plan_type` into the rendering context. - Add new CSS classes for plan-specific badge colors to `gwp-admin.css`. - Simplify plugin categorization in the registry to focus on license access (unlocked vs locked).
- Added astronaut image to the global license key registry page for improved visual appeal. - Expanded Hub AJAX class to include a delete handler for plugins, enhancing plugin management capabilities. - Implemented logging for various actions within the AJAX handlers to aid in debugging and monitoring. - Improved error handling and response formatting for AJAX requests, ensuring clearer communication of issues. - Enhanced plugin file resolution logic to handle fuzzy matching for installed plugins, improving user experience.
… license keys - Incremented CACHE_VERSION constant in Hub_Manager to 2.3.0. - Modified logic to ensure API is called even when no license keys are present, improving user experience by displaying available plugins instead of an empty page.
- Introduced a mechanism to mark legacy slugs as migrated to prevent re-scanning and confusion in the new UI. - Implemented a one-time re-keying process to transition legacy plugin keys to their canonical slugs, ensuring consistency across the system. - Updated logic to handle the migration of individual plugin keys while maintaining user-set values, improving the overall user experience.
Add support for updating plugins directly from the Hub interface. This includes a new AJAX endpoint to handle the update process, improved UI feedback with "updating" labels, and logic to resolve download packages for both licensed and free (WordPress.org) plugins. - Add `ajax_update` handler to `Hub_Ajax` - Implement update button in `Hub_Page` using AJAX instead of standard WordPress upgrade links - Add "updating" status labels to `gwp-admin.js` and registry - Add version comparison logic to prevent redundant updates if the plugin is already up to date
Modify the license key registry to exclude free plugins from the individual license keys card, as they are managed via WordPress.org and do not utilize license keys. Also remove the cache refresh timer display from the UI. - Filter `$all_plugins` to `$paid_plugins` before rendering individual keys - Remove `gwp-hero__cache-info` display logic
…e license validation Introduce `Api_Error_Handler` to provide a single source of truth for user-facing error messages and license state interpretation. This replaces ad-hoc string building with a consistent catalog of severity- aware messages used across the Hub, AJAX, and Registry components. Key changes: - Add `Api_Error_Handler` to manage error codes, severity, and messages. - Update `Hub_Ajax` to use centralized error messages for failures. - Enhance `Global_License_Key_Registry` with improved sanitization that prevents single-addon keys from being saved in the global field. - Improve `Hub_Manager` request construction to ensure `plugin_license_keys` is always sent as an associative object, preventing REST API validation errors on the server. - Update `gwp-admin.js` to respect server-stamped invalid states, preventing UI "flicker" when a key is validated as invalid by the server. - Improve robustness of `license_url` generation in Hub requests.
Revamp the administration tab interface to improve usability and visual consistency. Key improvements include: - Implement sticky tab navigation with an IntersectionObserver-based elevation effect (shadow deepening when stuck). - Refactor tab styling to use a more modern, consistent color palette and improved typography. - Move the 'Save License Keys' action into the tab navigation bar, positioning it as a primary action button. - Implement conditional visibility for the Save button, ensuring it is only displayed when the 'License Keys' tab is active. - Improve mobile responsiveness by adjusting tab wrapping and layout behavior.
Refine the visual layout of the administration hero section and ensure minified assets are synchronized with recent CSS and JS changes. - Adjust `.gwp-hero__astronaut` right offset and height for better visual alignment. - Update minified CSS and JS files to reflect structural changes in the administration interface.
JurriaanK
approved these changes
Jun 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.