' . esc_html( $eyebrow ) . '
' . esc_html( $description ) . '
';
}
private static function navigation( bool $back = true ): void {
echo '';
self::progress();
if ( is_array( $error ) ) {
echo '
' . esc_html__( 'Review before continuing', 'shieldlume-security' ) . '' . esc_html( $error['message'] ?? '' ) . '
';
}
self::formStart();
self::heading( 0, __( 'YOUR SITE. YOUR CHOICES.', 'shieldlume-security' ), __( 'Set up your first scan.', 'shieldlume-security' ), __( 'Check this site, choose your preferences, then save or start a scan. You can skip setup at any time.', 'shieldlume-security' ) );
echo '
' . esc_html__( '01 · Look', 'shieldlume-security' ) . '' . esc_html__( 'Understand readiness', 'shieldlume-security' ) . '
' . esc_html__( 'See what this installation can do now and what still needs attention.', 'shieldlume-security' ) . '
' . esc_html__( '02 · Choose', 'shieldlume-security' ) . '' . esc_html__( 'Control the connections', 'shieldlume-security' ) . '
' . esc_html__( 'Every optional permission starts off on a new installation. Existing choices are carried forward.', 'shieldlume-security' ) . '
' . esc_html__( '03 · Review', 'shieldlume-security' ) . '' . esc_html__( 'Act on evidence', 'shieldlume-security' ) . '
' . esc_html__( 'Scans report coverage and findings. Review the evidence before choosing your next step.', 'shieldlume-security' ) . '
';
echo '
' . esc_html__( 'Opening this guide does not scan your site or contact an external service. Setup is optional; reopen Setup guide whenever you need it.', 'shieldlume-security' ) . '
';
self::navigation( false );
echo '';
self::heading( 1, __( 'LOCAL READINESS', 'shieldlume-security' ), __( 'Can this site run a scan?', 'shieldlume-security' ), __( 'Check file access and storage first. Optional connections and Pro recovery can be set up later.', 'shieldlume-security' ) );
$statuses = array( 'ready' => __( 'Ready', 'shieldlume-security' ), 'action_required' => __( 'Needs review', 'shieldlume-security' ), 'optional_off' => __( 'Optional · off', 'shieldlume-security' ), 'unverified' => __( 'Not verified', 'shieldlume-security' ), 'temporary_grace' => __( 'Temporary grace', 'shieldlume-security' ) );
$essential = array();
$optional = array();
foreach ( $checks as $check ) {
if ( in_array( $check['check'], array( 'filesystem_access', 'disk_space', 'plugin_compatibility' ), true ) ) {
$essential[] = $check;
} else {
$optional[] = $check;
}
}
foreach ( array( $essential, $optional ) as $group => $observations ) {
if ( 1 === $group ) {
echo '
' . esc_html__( 'Optional Pro and service setup', 'shieldlume-security' ) . ' ' . count( $observations ) . '
' . esc_html__( 'Protected recovery, independent workers and connected services may need extra setup. They are separate from local scanning.', 'shieldlume-security' ) . '
';
}
echo '';
if ( 1 === $group ) {
echo '';
}
}
self::navigation();
echo '';
self::heading( 2, __( 'PERMISSION BY PERMISSION', 'shieldlume-security' ), __( 'Choose your scan settings.', 'shieldlume-security' ), __( 'Keep the choices you want. They take effect when you save; returning here shows your saved settings.', 'shieldlume-security' ) );
echo '
' . esc_html__( 'Your everyday routine', 'shieldlume-security' ) . '
' . esc_html__( 'Choose local scheduling, sign-in limits and email alerts first. Email uses your site’s existing mail service.', 'shieldlume-security' ) . '
';
foreach ( array( 'daily', 'login_limit', 'email' ) as $key ) { self::choice( $key, $settings ); }
echo '
';
$online = ! empty( $settings['online_references'] ) || ! empty( $settings['vulnerability_feed'] );
echo '
' . esc_html__( 'Optional online checks', 'shieldlume-security' ) . ' · ' . esc_html( $online ? __( 'Review saved permissions', 'shieldlume-security' ) : __( 'Off unless selected', 'shieldlume-security' ) ) . '
' . esc_html__( 'Local scanning works with these checks off. Each checkbox permits only the service described below. To stop a saved permission, clear its checkbox and save.', 'shieldlume-security' ) . '
';
foreach ( array( 'online_references', 'vulnerability_feed' ) as $key ) { self::choice( $key, $settings ); }
echo '' . esc_html__( 'Feed access needs a permitted token; connect it in Protection', 'shieldlume-security' ) . '
';
echo '
' . esc_html__( 'You can add two-step sign-in, request protection and a vulnerability feed later in Protection.', 'shieldlume-security' ) . '
';
echo '
' . esc_html__( 'Optional email tips and compatibility sharing come last, after your scan settings are saved. Pro service permissions are separate.', 'shieldlume-security' ) . '
';
self::navigation();
echo '';
self::heading( 3, __( 'READY WHEN YOU ARE', 'shieldlume-security' ), __( 'Save your choices.', 'shieldlume-security' ), __( 'Save and continue to the final optional page, or save and start a scan too. Review scan progress in Dashboard.', 'shieldlume-security' ) );
echo '
';
foreach ( self::choices() as $key => [$label] ) {
echo '- ' . esc_html( $label ) . '
';
}
echo '
' . esc_html__( 'Review the preferences above before finishing. Only the boxes you selected will be enabled.', 'shieldlume-security' ) . '
' . esc_html__( 'A scan uses the optional online checks you permit. It does not repair files automatically. Any schedule you enable requests future scans even if you continue without starting one now.', 'shieldlume-security' ) . '
';
echo '
';
}
}