Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
4ea7013
Fix stale @return docblock on license context methods missing fallbac…
SteveJonesDev Apr 22, 2026
c79f9c0
Merge pull request #1671 from equalizedigital/release/1.40.0
pattonwebz Apr 24, 2026
cd1f601
Revise screenshots for version 1.40.0
amberhinds Apr 26, 2026
7dea5d2
docs: regenerate hooks docs
github-actions[bot] Apr 27, 2026
8a47313
Fix spelling error in readme.txt
amberhinds Apr 27, 2026
88ff430
Merge pull request #1672 from equalizedigital/amberhinds-update-scree…
SteveJonesDev Apr 27, 2026
9a94a27
Merge pull request #1673 from equalizedigital/automation/regenerate-h…
SteveJonesDev Apr 28, 2026
71411b4
Merge pull request #1656 from equalizedigital/fix/docblock-return-fal…
SteveJonesDev Apr 29, 2026
01d28d4
Update POT translation file
pattonwebz May 4, 2026
8601656
Merge pull request #1680 from equalizedigital/update-translations/dev…
pattonwebz May 4, 2026
a861e10
Add versioning to scanner bundle URL
pattonwebz May 5, 2026
00dd795
escape the scanner bundle url and use add_query_arg to append ver for…
pattonwebz May 5, 2026
144bd77
Add PHPUnit test verifying scannerBundleUrl includes version query st…
Copilot May 5, 2026
a66e4b0
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
ec1bcad
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
af9714d
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
ecb35ef
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
cd6fc0a
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
bced036
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
4a33bd6
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
4a62c2d
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
0d6a2a0
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
db97201
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
a696415
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
ae0c781
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
750802d
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
f2be477
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
122bb98
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
e08b9f3
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
9dae62b
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
a208ecc
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
9aea949
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
5e21dc2
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
2d8205e
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
d38bd8b
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
981975a
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
a15c74b
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
20f5852
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
e4fc511
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
f2dbe37
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
e0b2418
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
20940c1
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
da3a3e3
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
abd9ddf
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
eab53de
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
a9083bc
PTC accessibility-checker (1985): Edits by Steve Jones (May 05, 2026 …
May 5, 2026
d3ae655
Remove incorrectly named old translation files
pattonwebz May 5, 2026
835dd57
Merge pull request #1684 from equalizedigital/ptc_1985_tm_edits_may-0…
pattonwebz May 5, 2026
6f38096
Initial plan
Copilot May 6, 2026
372c9c2
Add possibleHeading tests and fix rule to skip ARIA heading elements
Copilot May 6, 2026
fca944e
Validate aria-level range (1-6) in possible-heading rule; expand ARIA…
Copilot May 6, 2026
2689f0a
Treat missing aria-level as invalid ARIA heading in possible-heading …
Copilot May 6, 2026
5dc2305
Use strict Number+isInteger check for aria-level; add 2abc and 2.5 te…
Copilot May 7, 2026
90e7287
Make Pro the authoritative source for license checks
pattonwebz May 12, 2026
6927b22
When pro has active license clear free check cron
pattonwebz May 12, 2026
aeeece1
Rework what is shown on degraded license status and how it is determined
pattonwebz May 12, 2026
5a554b4
Update tests to account for all the scenarios that the license state …
pattonwebz May 12, 2026
5796f89
Fix test with wrong string comparison
pattonwebz May 12, 2026
05e4c17
Add a more descriptive comment and pro active checking
pattonwebz May 12, 2026
1f9879a
When pro is active but expired the unregister should call only unregi…
pattonwebz May 12, 2026
a88c8f7
Fix a return type hint to show active returns only after changes
pattonwebz May 12, 2026
a026e24
Update the tests to support pro always authoritive and no full free f…
pattonwebz May 12, 2026
eab442d
Merge pull request #1682 from equalizedigital/william/no-issue/add-ca…
pattonwebz May 12, 2026
f7efcdd
Merge pull request #1686 from equalizedigital/copilot/create-tests-fo…
pattonwebz May 12, 2026
b0f10c1
Merge pull request #1689 from equalizedigital/william/no-issue/make-p…
pattonwebz May 12, 2026
78a6e69
Fix false positive: skip screen-reader-only elements in text size check
SteveJonesDev May 12, 2026
f128905
Defer isScreenReaderOnly check to font-size evaluation branch
SteveJonesDev May 12, 2026
ca4ce77
Guard clip check with position check in isScreenReaderOnly
SteveJonesDev May 12, 2026
65b8105
Add Jest tests for text_small rule
SteveJonesDev May 12, 2026
58a7b79
Fix contradictory test case name and placement
SteveJonesDev May 12, 2026
3cc88a9
Broaden isScreenReaderOnly to catch dimension-based sr-only patterns
SteveJonesDev May 12, 2026
af1861c
Exclude font-size: 0 from text_small check
SteveJonesDev May 12, 2026
2667750
Bump version * Version: 1.40.0 -> 1.41.0
pattonwebz May 12, 2026
61fed6a
Add changelog for v1.41.0 and set the tested up to version to 7.0
pattonwebz May 12, 2026
1999584
Merge pull request #1690 from equalizedigital/steve/pro-802-elementor…
SteveJonesDev May 13, 2026
f4b19c1
Release v1.41.0: CI verification pass
Copilot May 13, 2026
1587f57
Fix the bundle url file location checking after cache buster added
pattonwebz May 13, 2026
c90fa5f
Merge branch 'release/1.41.0' of github.com:equalizedigital/accessibi…
pattonwebz May 13, 2026
cb45f9b
Fix an incorrect line break in the markup
pattonwebz May 13, 2026
e7308df
Update GAAD notice and add a pre-sale notice to let people know it ab…
pattonwebz May 13, 2026
7b6211e
Fix date in the GAAD sale notice start_date
pattonwebz May 13, 2026
458b0b7
Update tests to account for new notice content and format
pattonwebz May 13, 2026
bd50097
Add a little spacing to the buttons in GAAD notices
pattonwebz May 13, 2026
c1d1e66
Merge branch 'main' into release/1.41.0
pattonwebz May 13, 2026
2f4e478
Add a pro flag to the GAAD message for the pro sale
pattonwebz May 13, 2026
cff8440
Merge branch 'release/1.41.0' of github.com:equalizedigital/accessibi…
pattonwebz May 13, 2026
ae3aee8
Fix formatting in changelog entries for consistency
SteveJonesDev May 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions accessibility-checker.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
* Plugin Name: Accessibility Checker
* Plugin URI: https://a11ychecker.com
* Description: Audit and check your website for accessibility before you hit publish. In-post accessibility scanner and guidance.
* Version: 1.40.0
* Version: 1.41.0
* Requires PHP: 7.4
* Author: Equalize Digital
* Author URI: https://equalizedigital.com
Expand All @@ -36,7 +36,7 @@

// Current plugin version.
if ( ! defined( 'EDAC_VERSION' ) ) {
define( 'EDAC_VERSION', '1.40.0' );
define( 'EDAC_VERSION', '1.41.0' );
}

// Current database version.
Expand Down
163 changes: 96 additions & 67 deletions admin/AdminPage/AccessibilityReportsPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ public function render_page() {
$is_pro = $license_context['is_pro'];
$license_key = (string) get_option( 'edacp_license_key', '' );
$is_connected = $license_context['is_connected'];
$is_registered = $license_context['is_registered'];
$status = $license_context['status'];
$next_send_date = $this->get_next_send_estimate_date();
$scans_stats = new Scans_Stats();
$summary = $scans_stats->summary();
Expand Down Expand Up @@ -137,74 +139,97 @@ public function render_page() {
<section class="edac-reports-page__panel">
<h2><?php esc_html_e( 'Accessibility Reports', 'accessibility-checker' ); ?></h2>

<?php if ( ! $is_connected ) : ?>
<p class="edac-reports-page__intro">
<?php
if ( $is_pro ) {
esc_html_e( 'Get recurring email reports with a snapshot of your site’s accessibility, including total issues, trends over time, most problematic pages, and the most severe issues to fix first.', 'accessibility-checker' );
} else {
esc_html_e( 'Get recurring email reports with a snapshot of your site’s accessibility, including total issues, trends over time, most problematic pages, and the most severe issues to fix first. Some details, like full-site coverage and issue breakdowns, are available in Pro.', 'accessibility-checker' );
}
?>
</p>

<?php if ( $is_pro ) : ?>
<div class="edac-reports-page__single-action">
<?php if ( ! $is_connected && 'expired' === $status && $is_registered ) : ?>
<div class="edac-reports-grid edac-reports-grid--two">
<div class="edac-reports-card">
<div class="edac-reports-card__header">
<h3><?php esc_html_e( 'License Expired', 'accessibility-checker' ); ?></h3>
</div>
<p>
<?php esc_html_e( 'Your license has expired. This site is still connected but reports may stop until your license is renewed.', 'accessibility-checker' ); ?>
</p>
<p>
<a href="<?php echo esc_url( edac_link_wrapper( 'https://my.equalizedigital.com/', 'accessibility-reports', 'renew', false ) ); ?>" target="_blank" rel="noopener noreferrer">
<?php esc_html_e( 'Renew your license', 'accessibility-checker' ); ?>
</a>
</p>
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
<input type="hidden" name="action" value="edac_jwt_unregister" />
<?php wp_nonce_field( 'edac_jwt_unregister', 'edac_jwt_unregister_nonce' ); ?>
<button type="submit" class="button edac-reports-page__button" name="edac_jwt_unregister">
<?php esc_html_e( 'Disable Email Reports', 'accessibility-checker' ); ?>
</button>
</form>
</div>
</div>
<?php elseif ( ! $is_connected ) : ?>
<p class="edac-reports-page__intro">
<?php
if ( $is_pro ) {
esc_html_e( 'Get recurring email reports with a snapshot of your site’s accessibility, including total issues, trends over time, most problematic pages, and the most severe issues to fix first.', 'accessibility-checker' );
} else {
esc_html_e( 'Get recurring email reports with a snapshot of your site’s accessibility, including total issues, trends over time, most problematic pages, and the most severe issues to fix first. Some details, like full-site coverage and issue breakdowns, are available in Pro.', 'accessibility-checker' );
}
?>
</p>

<?php if ( $is_pro ) : ?>
<div class="edac-reports-page__single-action">
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
<input type="hidden" name="action" value="edac_jwt_register" />
<?php wp_nonce_field( 'edac_jwt_register', 'edac_jwt_register_nonce' ); ?>
<button type="submit" class="button button-primary edac-reports-page__button">
<?php esc_html_e( 'Enable Email Reports', 'accessibility-checker' ); ?>
</button>
</form>
</div>
<?php else : ?>
<div class="edac-reports-grid edac-reports-grid--two">
<div class="edac-reports-card">
<h3><?php esc_html_e( 'Free License Key', 'accessibility-checker' ); ?></h3>
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
<input type="hidden" name="action" value="edac_jwt_register" />
<?php wp_nonce_field( 'edac_jwt_register', 'edac_jwt_register_nonce' ); ?>
<button type="submit" class="button button-primary edac-reports-page__button">
<input type="hidden" name="action" value="edac_license" />
<?php wp_nonce_field( 'edac_license_nonce', 'edac_license_nonce' ); ?>
<label class="screen-reader-text" for="edac-reports-license-key"><?php esc_html_e( 'Free License Key', 'accessibility-checker' ); ?></label>
<input id="edac-reports-license-key" name="edacp_license_key" type="text" class="regular-text edac-reports-page__license-input" value="<?php echo esc_attr( $license_key ); ?>" />
<button type="submit" class="button button-primary edac-reports-page__button" name="edac_license_activate">
<?php esc_html_e( 'Enable Email Reports', 'accessibility-checker' ); ?>
</button>
</form>
</div>
<?php else : ?>
<div class="edac-reports-grid edac-reports-grid--two">
<div class="edac-reports-card">
<h3><?php esc_html_e( 'Free License Key', 'accessibility-checker' ); ?></h3>
<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
<input type="hidden" name="action" value="edac_license" />
<?php wp_nonce_field( 'edac_license_nonce', 'edac_license_nonce' ); ?>
<label class="screen-reader-text" for="edac-reports-license-key"><?php esc_html_e( 'Free License Key', 'accessibility-checker' ); ?></label>
<input id="edac-reports-license-key" name="edacp_license_key" type="text" class="regular-text edac-reports-page__license-input" value="<?php echo esc_attr( $license_key ); ?>" />
<button type="submit" class="button button-primary edac-reports-page__button" name="edac_license_activate">
<?php esc_html_e( 'Enable Email Reports', 'accessibility-checker' ); ?>
</button>
</form>
</div>

<div class="edac-reports-card">
<h3><?php esc_html_e( 'Get a Free License Key', 'accessibility-checker' ); ?></h3>
<p>
<?php
printf(
/* translators: %s: dashboard URL. */
wp_kses_post( __( 'Got the plugin from Equalize Digital? Your key is in your <a href="%s" target="_blank" rel="noopener noreferrer">dashboard</a>.', 'accessibility-checker' ) ),
esc_url( $dashboard_url )
);
?>
</p>
<p>
<?php
printf(
/* translators: %s: signup URL. */
wp_kses_post( __( 'Installed from WordPress.org? <a href="%s" target="_blank" rel="noopener noreferrer">Create a free account</a> to get one.', 'accessibility-checker' ) ),
esc_url( $signup_url )
);
?>
</p>
<p>
<?php
printf(
/* translators: %s: signup URL. */
wp_kses_post( __( 'Not sure? Just <a href="%s" target="_blank" rel="noopener noreferrer">create a free account</a>. It only takes a minute.', 'accessibility-checker' ) ),
esc_url( $signup_url )
);
?>
</p>
</div>
<div class="edac-reports-card">
<h3><?php esc_html_e( 'Get a Free License Key', 'accessibility-checker' ); ?></h3>
<p>
<?php
printf(
/* translators: %s: dashboard URL. */
wp_kses_post( __( 'Got the plugin from Equalize Digital? Your key is in your <a href="%s" target="_blank" rel="noopener noreferrer">dashboard</a>.', 'accessibility-checker' ) ),
esc_url( $dashboard_url )
);
?>
</p>
<p>
<?php
printf(
/* translators: %s: signup URL. */
wp_kses_post( __( 'Installed from WordPress.org? <a href="%s" target="_blank" rel="noopener noreferrer">Create a free account</a> to get one.', 'accessibility-checker' ) ),
esc_url( $signup_url )
);
?>
</p>
<p>
<?php
printf(
/* translators: %s: signup URL. */
wp_kses_post( __( 'Not sure? Just <a href="%s" target="_blank" rel="noopener noreferrer">create a free account</a>. It only takes a minute.', 'accessibility-checker' ) ),
esc_url( $signup_url )
);
?>
</p>
</div>
<?php endif; ?>
</div>
<?php endif; ?>
<?php else : ?>
<div class="edac-reports-grid edac-reports-grid--two">
<div class="edac-reports-card">
Expand Down Expand Up @@ -304,7 +329,7 @@ class="edac-reports-preview__image"
* Pro should only be treated as authoritative when it is both installed and valid.
* Otherwise the reports page should fall back to the free plugin state.
*
* @return array{has_pro_plugin:bool,is_pro:bool,status:string,is_connected:bool}
* @return array{has_pro_plugin:bool,is_pro:bool,status:string,is_connected:bool,fallback_active:bool}
*/
private function get_license_context(): array {
$has_pro_plugin = defined( 'EDACP_VERSION' );
Expand All @@ -324,19 +349,23 @@ private function get_license_context(): array {
* @param string $free_status Current free license status.
* @param string $site_id Current connected site ID.
* @param bool $fallback_active Whether a fallback from Pro to Free is currently active.
* @return array{has_pro_plugin:bool,is_pro:bool,status:string,is_connected:bool}
* @return array{has_pro_plugin:bool,is_pro:bool,status:string,is_connected:bool,is_registered:bool,fallback_active:bool}
*/
private static function resolve_license_context( bool $has_pro_plugin, string $pro_status, string $free_status, string $site_id, bool $fallback_active = false ): array {
$is_pro = $has_pro_plugin && 'valid' === $pro_status && ! $fallback_active;
$status = $is_pro ? $pro_status : $free_status;
$is_connected = 'valid' === $status && '' !== $site_id;

$is_pro = $has_pro_plugin && 'valid' === $pro_status && ! $fallback_active;
$status = $is_pro ? $pro_status : $free_status;
// is_connected is true when:
// 1. License status is valid AND site_id exists, OR
// 2. Pro exists but is expired/degraded (fallback_active), AND site_id exists (reports still flowing).
$is_connected = ( 'valid' === $status && '' !== $site_id ) || ( $has_pro_plugin && $fallback_active && '' !== $site_id );
$is_registered = '' !== $site_id;

return [
'has_pro_plugin' => $has_pro_plugin,
'is_pro' => $is_pro,
'status' => $status,
'is_connected' => $is_connected,
'is_registered' => $is_registered,
'fallback_active' => $fallback_active,
];
}
Expand Down
Loading
Loading