caps->exists('aam_manage_application_passwords')) { $available = user_can($user, 'aam_manage_application_passwords'); } return $available; } /** * Apply the AAM capability to WordPress application password operations. * * @param array $caps Primitive capabilities required by WordPress. * @param string $cap Requested meta capability. * @param int $user_id Acting user ID. * * @return array */ public function map_meta_cap($caps, $cap, $user_id) { if (in_array($cap, self::APP_PASSWORD_CAPS, true) && !$this->is_available_for_user(true, $user_id)) { $caps[] = 'do_not_allow'; } return $caps; } /** * Place Application Passwords before Posts on the Users screen. */ public function add_users_column($columns) { $result = []; foreach ($columns as $key => $label) { if ($key === 'posts') { $result[self::COLUMN] = __('Application Passwords', 'advanced-access-manager'); } $result[$key] = $label; } if (!isset($result[self::COLUMN])) { $result[self::COLUMN] = __('Application Passwords', 'advanced-access-manager'); } return $result; } /** * Render a compact usage summary and a short details popover. */ public function render_users_column($output, $column_name, $user_id) { if ($column_name !== self::COLUMN) { return $output; } // The column exposes password names, so follow the core list capability. if (!current_user_can('list_app_passwords', $user_id)) { return '—'; } $passwords = WP_Application_Passwords::get_user_application_passwords($user_id); $total = count($passwords); $used = 0; $last_used = 0; foreach ($passwords as $password) { $timestamp = (int) ($password['last_used'] ?? 0); if ($timestamp > 0) { $used++; $last_used = max($last_used, $timestamp); } } if (!$total) { return '' . esc_html__( 'No passwords', 'advanced-access-manager' ) . ''; } usort($passwords, static function($a, $b) { $usage = (int) ($b['last_used'] ?? 0) <=> (int) ($a['last_used'] ?? 0); return $usage ?: (int) ($b['created'] ?? 0) <=> (int) ($a['created'] ?? 0); }); $preview = array_slice($passwords, 0, 4); $label = sprintf( _n('%s password', '%s passwords', $total, 'advanced-access-manager'), number_format_i18n($total) ); $summary = $last_used ? sprintf( __('Last used %s ago', 'advanced-access-manager'), human_time_diff($last_used, time()) ) : __('Never used', 'advanced-access-manager'); $exact = $last_used ? wp_date('M j, Y g:i a', $last_used) : $summary; $edit_url = get_edit_user_link($user_id); $manage_url = $edit_url && wp_is_application_passwords_available_for_user($user_id) ? $edit_url . '#application-passwords-section' : ''; $panel_id = 'aam-ap-panel-' . absint($user_id); ob_start(); ?>
get_users_filter(); ?>