# ログイン中スタッフアバター表示機能

## 概要

KantanProプラグインのヘッダー部分に、全てのログイン中スタッフのアバターを表示する機能です。

## 機能仕様

### 表示対象
- **スタッフ**: スタッフ管理で`ktpwp_access`権限を付与されたユーザー
- **管理者**: 管理者権限（`administrator`）を持つユーザー
- **セッション確認**: 実際にログイン中（有効なセッション）のユーザーのみ

### 表示仕様
- **現在のユーザー**: 太字で青い枠線付きアバター（先頭に表示）
- **他のスタッフ**: 通常のアバター（ホバー時に拡大・不透明度変更）
- **アバターサイズ**: 32px × 32px
- **ツールチップ**: ホバー時にユーザー名を表示

### ログアウト処理
- スタッフがログアウトすると、セッション情報が削除される
- 次回の表示更新時に該当スタッフのアバターが自動的に消える
- Ajax更新: 30秒以内（キャッシュ期限）

## 実装ファイル

### PHP
- `includes/class-ktpwp-shortcodes.php`
  - `get_logged_in_users_display()`: メインの表示処理
  - `get_logged_in_staff_users()`: ログイン中スタッフ取得
  - `is_staff_user()`: スタッフ判定
  - `ajax_get_logged_in_users()`: Ajax処理

- `ktpwp.php`
  - `get_logged_in_users()`: Ajax処理（レガシー対応）
  - ヘッダー表示でショートコードクラスを使用

### CSS
- `css/styles.css`
  - `.user_icon`: 基本アバタースタイル
  - `.user_icon--current`: 現在ユーザー用スタイル
  - `.user_icon--staff`: 他スタッフ用スタイル
  - `.logged-in-staff-avatars`: アバター表示エリア
  - レスポンシブ対応（768px以下、480px以下）

## レスポンシブ対応

### デスクトップ（768px以上）
- アバターサイズ: 32px
- アバター間隔: 3px

### タブレット（768px以下）
- アバターサイズ: 28px
- アバター間隔: 2px

### モバイル（480px以下）
- アバターサイズ: 24px
- アバター間隔: 1px

## WordPressコーディングスタンダード準拠

- セキュリティ: `esc_attr()`, `esc_html()`, `esc_url()`による適切なエスケープ
- データベース: `$wpdb->prepare()`による安全なクエリ実行
- 権限チェック: `user_can()`, `current_user_can()`による適切な権限確認
- セッション管理: `WP_Session_Tokens`によるセッション有効性確認

## 動作フロー

1. **ページ読み込み時**
   ```
   ヘッダー表示 → get_staff_avatars_display() → get_logged_in_staff_users()
   → セッション確認 → スタッフ権限確認 → アバター表示HTML生成
   ```

2. **Ajax更新時**
   ```
   Ajax要求 → ajax_get_logged_in_users() → スタッフ取得
   → JSONレスポンス → フロントエンド更新
   ```

3. **ログアウト時**
   ```
   ログアウト実行 → セッション削除 → 次回表示時に自動除外
   ```

## セキュリティ機能

- **権限チェック**: スタッフ権限または管理者権限必須
- **セッション確認**: 有効なログインセッションのみ表示
- **XSSプロテクション**: 全ての出力値を適切にエスケープ
- **SQLインジェクション対策**: prepared statementを使用

## パフォーマンス最適化

- **キャッシュ機能**: 30秒間のメモリキャッシュ
- **効率的なクエリ**: セッション保持ユーザーのみを対象
- **最小限のDOM更新**: 必要な場合のみアバター表示を更新

## テスト項目

### 基本動作
- [ ] ログイン中スタッフのアバターが表示される
- [ ] 現在のユーザーが先頭に強調表示される
- [ ] 非スタッフユーザーは表示されない

### ログアウト動作
- [ ] スタッフがログアウトするとアバターが消える
- [ ] 30秒以内に表示が更新される

### レスポンシブ動作
- [ ] デスクトップでの適切な表示
- [ ] タブレットでの適切な表示
- [ ] モバイルでの適切な表示

### 権限・セキュリティ
- [ ] 管理者は常に表示される
- [ ] ktpwp_access権限ユーザーのみ表示される
- [ ] 無効なセッションユーザーは表示されない

## 今後の拡張予定

- リアルタイム更新（WebSocketまたはServer-Sent Events）
- アバタークリック時のユーザー詳細表示
- オンライン状態インジケーター
- グループ表示機能
