container ); if ( $screen->is( 'users' ) || $screen->is( 'users-network' ) ) { $asset = new Utils\Asset( $this->container, 'reset-indicator' ); $asset->enqueue_style(); } } /** * Add custom column to the users list table * * @param array $columns Existing columns. * * @return array Modified columns. */ public function add_custom_column( array $columns ): array { // Get the current user. $current_user = new User( $this->container ); // Ensure current user has the managing permissions. if ( $current_user->has_managing_permissions() ) { $columns[ self::COLUMN_SLUG ] = __( 'Password Reset Enforced?', 'password-reset-enforcement' ); } return $columns; } /** * Render the content of the custom column * * @param string $value The column value. * @param string $column_name The column name. * @param int $user_id The user ID. * * @return string The modified column value. */ public function render_custom_column( string $value, string $column_name, int $user_id ): string { if ( self::COLUMN_SLUG === $column_name ) { $wp_user = get_user_by( 'ID', $user_id ); if ( $wp_user instanceof WP_User ) { $user = new User( $this->container, $wp_user ); if ( false === $user->is_password_reset_required() ) { $value = sprintf( '

%s

', esc_html__( 'No', 'password-reset-enforcement' ) ); } else { $value = sprintf( '

%s

', esc_html__( 'Yes', 'password-reset-enforcement' ) ); $data = $user->get_password_reset_request_data(); if ( null !== $data ) { $items = [ __( 'Requested at:', 'password-reset-enforcement' ) => sprintf( // Translators: %1$s - timestamp, %2$s - human-readable time difference. __( '%1$s (%2$s ago)', 'password-reset-enforcement' ), Utils\Date_Time::get_i18n_datetime_string( $data['requested_at'] ), human_time_diff( $data['requested_at'] ), ), __( 'Requestor:', 'password-reset-enforcement' ) => $user->get_requestor_display_name( $data['requested_by'] ), ]; $value .= ''; } } } } return $value; } /** * Maybe register the admin notice * * @return void */ public function maybe_register_admin_notice(): void { $screen = new Utils\Screen( $this->container ); if ( ! $screen->is( 'user-edit' ) ) { return; } $user_id = isset( $_GET['user_id'] ) ? Utils\Type::ensure_int( wp_unslash( $_GET['user_id'] ) ) : 0; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized if ( 0 === $user_id ) { return; } $wp_user = get_user_by( 'ID', $user_id ); if ( $wp_user instanceof WP_User ) { $user = new User( $this->container, $wp_user ); if ( $user->is_password_reset_required() ) { $data = $user->get_password_reset_request_data(); if ( null === $data ) { return; } $requestor = $user->get_requestor_display_name( $data['requested_by'] ); // Register the admin notice. wp_admin_notice( wp_kses( sprintf( // Translators: %1$s - user display name, %2$s - human-readable time difference. __( 'A password reset was enforced for this user by %1$s %2$s ago, but they have not completed it yet. Please make sure they are informed.', 'password-reset-enforcement' ), $requestor, human_time_diff( $data['requested_at'] ), ), [ 'strong' => [] ], ), [ 'type' => 'info' ], ); } } } }