✓
⚠
⚠
0 ) : ?>
0 ) {
printf(
/* translators: %d is the number of checklist items that are not yet fully earned. */
esc_html( _n( '%d item still needs attention.', '%d items still need attention.', $guardforge_score_failed, 'guardforge' ) ),
(int) $guardforge_score_failed
);
} else {
esc_html_e( 'Every check on the list is earned in full.', 'guardforge' );
}
/*
* The number is a reading of the settings. On a copy, two of
* those settings are switched on and held soft on purpose, and
* a headline with no qualifier beside it reads as a claim that
* they are working. The score screen names them; here there is
* only room to say that the number needs reading that way.
*/
if ( $guardforge_score_soft > 0 ) {
echo ' ';
printf(
/* translators: %d is how many checklist items are switched on but not enforced on this copy. */
esc_html( _n(
'Staging mode holds %d of them soft on this copy — it keeps its points, and it is not protecting anybody here.',
'Staging mode holds %d of them soft on this copy — they keep their points, and they are not protecting anybody here.',
$guardforge_score_soft,
'guardforge'
) ),
(int) $guardforge_score_soft
);
}
?>
__( 'File change', 'guardforge' ),
'vuln_match' => __( 'Vulnerability', 'guardforge' ),
'login_series' => __( 'Login series', 'guardforge' ),
];
$guardforge_check_labels = [
'feed' => __( 'Vulnerability feed', 'guardforge' ),
'scan' => __( 'File integrity scan', 'guardforge' ),
'alerts' => __( 'Alerts', 'guardforge' ),
'cloudflare' => __( 'Cloudflare', 'guardforge' ),
];
$guardforge_check_links = [
'feed' => admin_url( 'admin.php?page=guardforge-vulndb' ),
'scan' => admin_url( 'admin.php?page=guardforge-integrity' ),
'cloudflare' => admin_url( 'admin.php?page=guardforge-cloudflare' ),
];
// The Alerts screen is GuardForge Pro's since 1.6.0: without the add-on
// there is no such page to open.
if ( GUARDFORGE_Pro_Bridge::addon_active() ) {
$guardforge_check_links['alerts'] = admin_url( 'admin.php?page=guardforge-alerts' );
}
$guardforge_cases_url = admin_url( 'admin.php?page=guardforge-cases' );
$guardforge_needs = isset( $gf_cases_summary['needs_decision'] ) && is_array( $gf_cases_summary['needs_decision'] ) ? $gf_cases_summary['needs_decision'] : [];
$guardforge_needs_total = isset( $gf_cases_summary['needs_decision_total'] ) ? (int) $gf_cases_summary['needs_decision_total'] : count( $guardforge_needs );
$guardforge_verified_n = isset( $gf_cases_summary['verified_count'] ) ? (int) $gf_cases_summary['verified_count'] : 0;
$guardforge_cases_as_of = isset( $gf_cases_summary['as_of'] ) ? (string) $gf_cases_summary['as_of'] : '';
$guardforge_checks_ok = isset( $gf_checks['verified'] ) && is_array( $gf_checks['verified'] ) ? $gf_checks['verified'] : [];
$guardforge_checks_bad = isset( $gf_checks['not_working'] ) && is_array( $gf_checks['not_working'] ) ? $gf_checks['not_working'] : [];
$guardforge_checks_na = isset( $gf_checks['unavailable'] ) && is_array( $gf_checks['unavailable'] ) ? $gf_checks['unavailable'] : [];
$guardforge_checks_nr = isset( $gf_checks['not_run'] ) && is_array( $gf_checks['not_run'] ) ? $gf_checks['not_run'] : [];
// Checks that did not run on this site, for whatever reason (Pro, not set up, not run yet): none of them failed.
$guardforge_not_run_n = count( $guardforge_checks_na ) + count( $guardforge_checks_nr );
// The heading is red only when something is listed under it.
$guardforge_bad_color = $guardforge_checks_bad ? 'var(--status-error)' : 'var(--text-muted)';
?>
count( $guardforge_needs ) ) : ?>
, no heading of their own,
* distinguished only by an inline muted colour. A Free site (or a
* Pro site with Cloudflare/alerts not yet configured) read as
* having "verified" a control it does not even have. This is its
* own section, named for what it actually is — Guideline 5 again:
* a feature this site does not ship or has not turned on is not a
* pass, and it is not a fail either.
*/
?>