Skip to content

Commit 31fd8d9

Browse files
authored
Merge pull request #2225 from opensource-workshop/bug/fix-mail-subject-null-error
[プラグイン共通] 投稿通知の件名が未設定の場合に500エラーが発生する問題を修正しました
2 parents 51f1eba + 95742c1 commit 31fd8d9

File tree

4 files changed

+79
-1
lines changed

4 files changed

+79
-1
lines changed

app/Models/Common/BucketsMail.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,20 @@ public static function stripTagsWysiwyg(?string $body): string
106106

107107
/**
108108
* フォーマット済みの件名を取得
109+
*
110+
* @param string|null $subject
111+
* @param array $notice_embedded_tags
112+
* @return void
109113
*/
110-
public function getFormattedSubject(string $subject, array $notice_embedded_tags)
114+
public function getFormattedSubject(string|null $subject, array $notice_embedded_tags)
111115
{
116+
if ($subject === null || $subject === '') {
117+
/**
118+
* 件名が未設定の場合、Laravelのデフォルト値(「Post Notice」等)が設定されてわかりづらい為、【件名未設定】を設定する。
119+
* ※別途、画面側でバリデーションを追加する為、件名が空の状態は今後、基本的にはありえないが、既存運用で件名が空のデータがある場合の対策として実装する。
120+
*/
121+
return '【件名未設定】';
122+
}
112123
return $this->replaceEmbeddedTags($subject, $notice_embedded_tags);
113124
}
114125

app/Plugins/User/UserPluginBase.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,16 +818,43 @@ public function saveBucketsMails($request, $page_id, $frame_id, $block_id)
818818
$rules['approved_groups'] = [new CustomValiRequiredWithoutAllSupportsArrayInput([$request->approved_author, $request->approved_addresses], $name)];
819819
}
820820

821+
// 使用するメール送信メソッドを取得
822+
$use_bucket_mail_methods = ['notice', 'relate', 'approval', 'approved']; // デフォルト値
823+
if (method_exists($this, 'useBucketMailMethods')) {
824+
$use_bucket_mail_methods = $this->useBucketMailMethods();
825+
}
826+
827+
// 有効なメール機能に対してのみ件名フィールドのバリデーションを追加
828+
if (in_array('notice', $use_bucket_mail_methods) && $request->notice_on) {
829+
$rules['notice_subject'] = ['required', 'max:255'];
830+
}
831+
832+
if (in_array('relate', $use_bucket_mail_methods) && $request->relate_on) {
833+
$rules['relate_subject'] = ['required', 'max:255'];
834+
}
835+
836+
if (in_array('approval', $use_bucket_mail_methods) && $request->approval_on) {
837+
$rules['approval_subject'] = ['required', 'max:255'];
838+
}
839+
840+
if (in_array('approved', $use_bucket_mail_methods) && $request->approved_on) {
841+
$rules['approved_subject'] = ['required', 'max:255'];
842+
}
843+
821844
$validator = Validator::make($request->all(), $rules);
822845
$validator->setAttributeNames([
823846
'notice_addresses' => '送信先メールアドレス',
824847
'notice_groups' => '送信先グループ',
825848
'notice_everyone' => '全ユーザに通知',
849+
'notice_subject' => '投稿通知の件名',
826850
'approval_addresses' => '送信先メールアドレス',
827851
'approval_groups' => '送信先グループ',
852+
'approval_subject' => '承認通知の件名',
828853
'approved_author' => '投稿者へ通知する',
829854
'approved_addresses' => '送信先メールアドレス',
830855
'approved_groups' => '送信先グループ',
856+
'approved_subject' => '承認済み通知の件名',
857+
'relate_subject' => '関連記事通知の件名',
831858
]);
832859

833860
// エラーがあった場合は入力画面に戻る。

resources/views/plugins/common/frame_edit_mails.blade.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ function checkbox_notice_everyone() {
136136
</small>
137137

138138
<span class="badge badge-secondary mt-3 mb-1">投稿通知の件名</span>
139+
<span class="badge badge-danger">必須</span>
139140
<div class="pl-0">
140141
<input type="text" name="notice_subject" value="{{old('notice_subject', $bucket_mail->notice_subject)}}" class="form-control @if ($errors && $errors->has('notice_subject')) border-danger @endif">
141142
@include('plugins.common.errors_inline', ['name' => 'notice_subject'])
@@ -166,6 +167,7 @@ function checkbox_notice_everyone() {
166167
</div>
167168
<div class="collapse" id="collapse_relate">
168169
<span class="badge badge-secondary mt-3 mb-1">関連記事通知の件名</span>
170+
<span class="badge badge-danger">必須</span>
169171
<div class="pl-0">
170172
<input type="text" name="relate_subject" value="{{old('relate_subject', $bucket_mail->relate_subject)}}" class="form-control @if ($errors && $errors->has('relate_subject')) border-danger @endif">
171173
@include('plugins.common.errors_inline', ['name' => 'relate_subject'])
@@ -222,6 +224,7 @@ function checkbox_notice_everyone() {
222224
</small>
223225

224226
<span class="badge badge-secondary mt-3 mb-1">承認通知の件名</span>
227+
<span class="badge badge-danger">必須</span>
225228
<div class="pl-0">
226229
<input type="text" name="approval_subject" value="{{old('approval_subject', $bucket_mail->approval_subject)}}" class="form-control @if ($errors && $errors->has('approval_subject')) border-danger @endif">
227230
@include('plugins.common.errors_inline', ['name' => 'approval_subject'])
@@ -290,6 +293,7 @@ function checkbox_notice_everyone() {
290293
</small>
291294

292295
<span class="badge badge-secondary mt-3 mb-1">承認済み通知の件名</span>
296+
<span class="badge badge-danger">必須</span>
293297
<div class="pl-0">
294298
<input type="text" name="approved_subject" value="{{old('approved_subject', $bucket_mail->approved_subject)}}" class="form-control @if ($errors && $errors->has('approved_subject')) border-danger @endif">
295299
@include('plugins.common.errors_inline', ['name' => 'approved_subject'])

tests/Unit/Models/Common/BucketsMailTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,40 @@ public function testGetFormattedSubject(): void
5252
// $this->assertStringContainsString('[[delete_comment]]', $subject, '件名の[[delete_comment]]は置換されない事');
5353
$this->assertStringContainsString('【サンプルサイト】', $subject, '件名の[[site_name]]は置換される事');
5454
}
55+
56+
/**
57+
* getFormattedSubject()でnull値を渡した場合のテスト
58+
*/
59+
public function testGetFormattedSubjectWithNull(): void
60+
{
61+
$notice_embedded_tags = [
62+
NoticeEmbeddedTag::site_name => 'サンプルサイト',
63+
NoticeEmbeddedTag::title => 'テストタイトル',
64+
NoticeEmbeddedTag::body => 'HTMLを除いた本文',
65+
NoticeEmbeddedTag::url => 'http://localhost/plugin/xxxx',
66+
];
67+
68+
$mail = new BucketsMail();
69+
$result = $mail->getFormattedSubject(null, $notice_embedded_tags);
70+
71+
$this->assertEquals('【件名未設定】', $result, 'null値の場合はデフォルトメッセージが返される事');
72+
}
73+
74+
/**
75+
* getFormattedSubject()で空文字列を渡した場合のテスト
76+
*/
77+
public function testGetFormattedSubjectWithEmptyString(): void
78+
{
79+
$notice_embedded_tags = [
80+
NoticeEmbeddedTag::site_name => 'サンプルサイト',
81+
NoticeEmbeddedTag::title => 'テストタイトル',
82+
NoticeEmbeddedTag::body => 'HTMLを除いた本文',
83+
NoticeEmbeddedTag::url => 'http://localhost/plugin/xxxx',
84+
];
85+
86+
$mail = new BucketsMail();
87+
$result = $mail->getFormattedSubject('', $notice_embedded_tags);
88+
89+
$this->assertEquals('【件名未設定】', $result, '空文字列の場合はデフォルトメッセージが返される事');
90+
}
5591
}

0 commit comments

Comments
 (0)