Skip to content

[プラグイン共通] 投稿通知の件名が未設定の場合に500エラーが発生する問題を修正しました - #2225

Merged
masaton0216 merged 2 commits into
masterfrom
bug/fix-mail-subject-null-error
Jul 9, 2025
Merged

[プラグイン共通] 投稿通知の件名が未設定の場合に500エラーが発生する問題を修正しました#2225
masaton0216 merged 2 commits into
masterfrom
bug/fix-mail-subject-null-error

Conversation

@masaton0216

@masaton0216 masaton0216 commented Jul 9, 2025

Copy link
Copy Markdown
Contributor

概要

ブログプラグインなどで、メール設定において「投稿通知の件名」を空の状態で記事を新規登録すると500エラーが発生する問題を修正しました。

修正内容

1. BucketsMail::getFormattedSubject()メソッドの修正

  • null/空文字列を許容するよう型定義を変更(string < /dev/null | null
  • 件名が未設定の場合に「【件名未設定】」をデフォルト値として返すよう修正
  • 既存データへの対応も考慮したコメントを追加

2. UserPluginBase::saveBucketsMailsメソッドの修正

  • useBucketMailMethods()で有効なメール機能を動的に判定
  • 通知機能がONの場合のみ件名フィールドを必須とするバリデーションを追加
  • 適切な日本語エラーメッセージを設定

3. メール設定画面の改善

  • 全ての件名フィールドに赤い「必須」バッジを追加
  • ユーザーに必須項目であることを視覚的に伝達

4. テストケースの追加

  • BucketsMailTest::testGetFormattedSubjectWithNull(): null値処理のテスト
  • BucketsMailTest::testGetFormattedSubjectWithEmptyString(): 空文字列処理のテスト
  • 既存テストでカバーされていなかったエッジケースを追加

検討事項

本文の必須化について

メール通知の本文についても必須にすることを検討しましたが、以下の理由により実装を見送りました:

  • シンプル通知の要求: 件名のみで十分な情報を伝える通知の需要(例:「【ブログ更新】新しい記事が投稿されました」)
  • 運用の柔軟性: 組織によって通知の詳細度要求が異なる
  • モバイル対応: スマートフォンでの通知表示を重視し、URLアクセスを促進する運用
  • 既存設計: Connect-CMSは本文をnullableとして設計されており、設計思想との整合性

件名に[[title]][[url]]の埋め込みタグを活用することで、本文なしでも十分な通知が可能と判断しました。

影響範囲

  • Connect-CMSの**ほぼ全てのプラグイン(30プラグイン)**が対象
  • 投稿通知、承認通知、承認済み通知、関連記事通知の全てで同様の問題が解決

テスト手順

  1. ブログプラグインを配置
  2. フレーム編集 → メール設定を開く
  3. 投稿通知をONにして件名を空白にして保存
  4. バリデーションエラーが表示されることを確認
  5. 適切な件名を入力して保存が成功することを確認

テスト実行

# 今回追加したテストの実行
./vendor/bin/phpunit tests/Unit/Models/Common/BucketsMailTest.php

# 特定のテストメソッドのみ実行
./vendor/bin/phpunit tests/Unit/Models/Common/BucketsMailTest.php --filter testGetFormattedSubjectWith

関連Issue

Closes #2224

レビュー観点

  • バリデーションロジックが各プラグインのuseBucketMailMethods()に応じて適切に動作するか
  • 既存データ(件名が空のデータ)に対する後方互換性が保たれているか
  • エラーメッセージが適切に日本語で表示されるか
  • 新しく追加したテストケースが適切にエッジケースをカバーしているか
  • テスト実行時に全てのテストが成功するか

- BucketsMail::getFormattedSubject()メソッドでnull/空文字列の場合にデフォルト値を返すよう修正
- UserPluginBase::saveBucketsMailsメソッドに動的な件名フィールドバリデーションを追加
- メール設定画面の件名フィールドに「必須」バッジを追加してユーザビリティを向上

修正内容:
- app/Models/Common/BucketsMail.php: getFormattedSubject()でnull許容とデフォルト値設定
- app/Plugins/User/UserPluginBase.php: 有効なメール機能に応じた動的バリデーション追加
- resources/views/plugins/common/frame_edit_mails.blade.php: 件名フィールドに必須バッジ追加

関連Issue: #2224

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@masaton0216 masaton0216 self-assigned this Jul 9, 2025
@masaton0216 masaton0216 added the bug バグ・不具合連絡 label Jul 9, 2025
- null値が渡された場合のテストケースを追加
- 空文字列が渡された場合のテストケースを追加
- 両方とも「【件名未設定】」がデフォルト値として返されることを確認

追加テストメソッド:
- testGetFormattedSubjectWithNull(): null値のテスト
- testGetFormattedSubjectWithEmptyString(): 空文字列のテスト

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@masaton0216
masaton0216 merged commit 31fd8d9 into master Jul 9, 2025
@masaton0216
masaton0216 deleted the bug/fix-mail-subject-null-error branch July 10, 2025 03:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug バグ・不具合連絡

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[プラグイン共通] 投稿通知の件名が未設定の場合に500エラーが発生する問題

1 participant