Enforcer::META_EXEMPT, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- small, admin-only list. 'search' => '' !== $search ? '*' . $search . '*' : '', 'number' => self::PER_PAGE, 'paged' => $paged, 'orderby' => 'display_name', ] ); $rows = $whitelist->get_results(); $total = $whitelist->get_total(); } else { list( $rows, $total ) = FlagRepository::paginate( $status, self::PER_PAGE, $paged, $search ); } $counts = FlagRepository::counts(); $notes = NoteRepository::summary_for_users( 'whitelisted' === $status ? wp_list_pluck( $rows, 'ID' ) : wp_list_pluck( $rows, 'user_id' ) ); $base = admin_url( 'admin.php?page=ndsg-flags' ); $tabs = [ 'open' => [ __( 'All open', 'netdesign-session-guard' ), FlagRepository::count_open() ] ]; foreach ( $statuses as $key => $label ) { $tabs[ $key ] = [ $label, $counts[ $key ] ?? 0 ]; } $tabs['whitelisted'] = [ __( 'Excluded users', 'netdesign-session-guard' ), self::count_whitelisted() ]; ?>

ID ] ?? null; ?>
display_name ); ?>
user_email ); ?>
note, 16 ) ) : '—'; ?>
reasons, true ) ?: []; $note = $notes[ (int) $f->user_id ] ?? null; $user = admin_url( 'admin.php?page=ndsg-user&user_id=' . (int) $f->user_id ); $phone = (string) get_user_meta( $f->user_id, 'billing_phone', true ); ?>




level ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- escaped in Risk::badge(). ?> prior ) : ?>

prior, 'netdesign-session-guard' ), (int) $f->prior ) ); ?>

display_name ); ?>
user_email ); ?>

ID user_id; ?>

✎ note, 12 ) ); ?>





created_at ) ) ); ?>
(int) $f->user_id ] ); ?>
status ) || 'blocked' === $f->status ) : ?>
add_query_arg( 'paged', '%#%' ), 'format' => '', 'current' => $paged, 'total' => (int) ceil( $total / self::PER_PAGE ), ] ) ?: '' ); ?>
Enforcer::META_EXEMPT, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key -- small, admin-only count. 'number' => 1, 'fields' => 'ID', 'count_total' => true, ] ); return (int) $q->get_total(); } public static function duration( $seconds ) { $seconds = (int) $seconds; if ( $seconds < 60 ) { /* translators: %d: seconds */ return sprintf( __( '%ds', 'netdesign-session-guard' ), $seconds ); } if ( $seconds < HOUR_IN_SECONDS ) { /* translators: 1: minutes, 2: seconds */ return sprintf( __( '%1$dm %2$ds', 'netdesign-session-guard' ), intdiv( $seconds, 60 ), $seconds % 60 ); } /* translators: 1: hours, 2: minutes */ return sprintf( __( '%1$dh %2$dm', 'netdesign-session-guard' ), intdiv( $seconds, HOUR_IN_SECONDS ), intdiv( $seconds % HOUR_IN_SECONDS, 60 ) ); } /** * "How to read the risk levels" box. */ public static function legend() { ?>
$info ) : ?>