From a2059b98eb1b09dac32bfeb8954cc95ebe512b31 Mon Sep 17 00:00:00 2001 From: sakaguchi Date: Wed, 3 Jun 2026 21:48:23 +0900 Subject: [PATCH] =?UTF-8?q?fix=20#3579=20=E3=80=90=E3=83=A1=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=83=95=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89=E6=96=B0?= =?UTF-8?q?=E8=A6=8F=E7=99=BB=E9=8C=B2=E3=83=BB=E7=B7=A8=E9=9B=86=EF=BC=9A?= =?UTF-8?q?5.1.x=E3=80=91=E8=A9=B3=E7=B4=B0=E8=A8=AD=E5=AE=9A=E3=81=AB?= =?UTF-8?q?=E3=81=82=E3=82=8B=E3=80=8C=E3=82=B0=E3=83=AB=E3=83=BC=E3=83=97?= =?UTF-8?q?=E5=90=8D=E3=80=8D=E3=81=A8=E3=80=8C=E3=82=B0=E3=83=AB=E3=83=BC?= =?UTF-8?q?=E3=83=97=E5=85=A5=E5=8A=9B=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=80=8D=E3=81=AB=E3=83=8F=E3=82=A4=E3=83=95=E3=83=B3=E3=82=92?= =?UTF-8?q?=E5=85=A5=E3=82=8C=E3=82=8B=E3=81=A8=E3=82=A8=E3=83=A9=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=81=AA=E3=82=8B=E4=BB=B6=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/Model/Table/MailFieldsTable.php | 26 +++++++++--- .../Model/Table/MailFieldsTableTest.php | 40 ++++++++++++++++++- 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/plugins/bc-mail/src/Model/Table/MailFieldsTable.php b/plugins/bc-mail/src/Model/Table/MailFieldsTable.php index 9705b770be..1c91e592ec 100755 --- a/plugins/bc-mail/src/Model/Table/MailFieldsTable.php +++ b/plugins/bc-mail/src/Model/Table/MailFieldsTable.php @@ -126,8 +126,8 @@ public function validationDefault(Validator $validator): Validator ->scalar('group_field') ->maxLength('group_field', 255, __d('baser_core', 'グループ名は255文字以内で入力してください。')) ->add('group_field', [ - 'halfTextMailField' => [ - 'rule' => 'halfTextMailField', + 'halfTextMailGroupField' => [ + 'rule' => 'halfTextMailGroupField', 'provider' => 'table', 'message' => __d('baser_core', 'グループ名は半角英数字、ハイフン、アンダースコアで入力してください。') ]]); @@ -135,8 +135,8 @@ public function validationDefault(Validator $validator): Validator ->scalar('group_valid') ->maxLength('group_valid', 255, __d('baser_core', 'グループ入力チェックは255文字以内で入力してください。')) ->add('group_valid', [ - 'halfTextMailField' => [ - 'rule' => 'halfTextMailField', + 'halfTextMailGroupField' => [ + 'rule' => 'halfTextMailGroupField', 'provider' => 'table', 'message' => __d('baser_core', 'グループ入力チェックは半角英数字、ハイフン、アンダースコアで入力してください。') ]]); @@ -233,7 +233,7 @@ public function duplicateMailField(string $value, array $context) /** * メールフィールドの値として正しい文字列か検証する - * 半角小文字英数-_ + * 半角小文字英数字とアンダースコアを許容 * メールフィールドは、DBテーブルのフィールドとして利用されるため、 * 大文字を利用した場合にクォートを入れないとエラーとなってしまう * @@ -354,4 +354,20 @@ public function formatSource($source) return implode("\n", $sourceList); } + /** + * グループ系フィールドの値として正しい文字列か検証する + * 半角英数字、ハイフン、アンダースコアを許容 + * + * @param string $value + * @return bool + * @checked + * @noTodo + * @unitTest + */ + public function halfTextMailGroupField(string $value): bool + { + $pattern = "/^[a-zA-Z0-9_-]*$/"; + return preg_match($pattern, $value) === 1; + } + } diff --git a/plugins/bc-mail/tests/TestCase/Model/Table/MailFieldsTableTest.php b/plugins/bc-mail/tests/TestCase/Model/Table/MailFieldsTableTest.php index 640e167f2d..ebfbbe1756 100755 --- a/plugins/bc-mail/tests/TestCase/Model/Table/MailFieldsTableTest.php +++ b/plugins/bc-mail/tests/TestCase/Model/Table/MailFieldsTableTest.php @@ -146,6 +146,23 @@ public function test_validationDefaultHankakuCheck() $this->assertEquals('グループ入力チェックは半角英数字、ハイフン、アンダースコアで入力してください。', current($errors['group_valid'])); } + public function test_validationDefaultAllowHyphenOnlyForGroupFields() + { + $validator = $this->MailFieldsTable->getValidator('default'); + $errors = $validator->validate([ + 'name' => 'test', + 'mail_content_id' => 999, + 'type' => 'text', + 'field_name' => 'field-name', + 'group_field' => 'Group-Name', + 'group_valid' => 'Group-Valid' + ]); + + $this->assertEquals('フィールド名は小文字の半角英数字、アンダースコアのみで入力してください。', current($errors['field_name'])); + $this->assertArrayNotHasKey('group_field', $errors); + $this->assertArrayNotHasKey('group_valid', $errors); + } + public function test_validationDefaultDuplicate() { MailFieldsFactory::make(['mail_content_id' => 1, 'field_name' => 'field_1'])->persist(); @@ -212,7 +229,7 @@ public function testDuplicateMailField() /** * メールフィールドの値として正しい文字列か検証する - * 半角英数-_ + * 半角小文字英数字とアンダースコア */ public function testHalfTextMailField() { @@ -225,6 +242,27 @@ public function testHalfTextMailField() $string = 'abcABC123_'; $result = $this->MailFieldsTable->halfTextMailField($string); $this->assertFalse($result); + + //case false + $string = 'abc123-_'; + $result = $this->MailFieldsTable->halfTextMailField($string); + $this->assertFalse($result); + } + + /** + * グループ系フィールドの値として正しい文字列か検証する + */ + public function testHalfTextMailGroupField() + { + //case true + $string = 'abcABC123-_'; + $result = $this->MailFieldsTable->halfTextMailGroupField($string); + $this->assertTrue($result); + + //case false + $string = 'abcABC123-_:!'; + $result = $this->MailFieldsTable->halfTextMailGroupField($string); + $this->assertFalse($result); } /**