feat(board,ecommerce,pay,verification,templates,core): 문의 답변 사슬·답글 삭제 정책·검증 계약 + 실패 사유 표면화 전수

공개 (답변 중복 등록)/(문의 삭제 시 답변 잔존) 수정과 동형 결함 전수 해소.

- 문의 답변 단일성: 1차(피벗 is_answered) + 2차(게시판 리스너 duplicate 마커) 이중 방어,
 경합 경로에서도 사유(reply_already_exists 422)가 보존되도록 훅 반환 계약 확장
- 질문·답변·피벗 생명주기 대칭: 삭제/복원/영구삭제 훅 연동 + 고아 데이터 백필 업그레이드 스텝
- 게시판별 답글 삭제 정책(cascade/block) 신설, 정렬 화이트리스트·per_page 게이트
 (전량 조회 소비처 200/999 를 수용하는 상한 999 — 조였다가 관리자 화면 2곳 422 회귀 즉시 정정)
- 결제/본인인증 플러그인 검증 계약: FormRequest 15종 승격 + 컨트롤러 catch 정합.
 거래 조회 tid 상한은 저장 컬럼(varchar 100) 기준 — 해외 CBT TID(40자) 수용
- onError 토스트 고정 문구 전수 해소(67건/50파일/15확장) — 서버 실패 사유를 그대로 표면화,
 change-password 오변수(response→error) 교정
- 코어 플러그인 설정 검증 안내의 항목 표시명이 스키마 라벨(ko/en) 폴백에 덮여 요청 로케일
 (ja) 라벨을 잃던 회귀 정정 — 번역 등록이 있으면 그것을 우선 (7.0.7 미출시 기능 자체 결함)
- 사전 결함 정리(Icon 등가표 27·darkmode 2·validated 통일), API 문서·CHANGELOG·ja 팩 동기
- develop(60652fdc0) 리베이스: getTable 정비와 병합 — 양측 의도 보존 (충돌 18파일)
This commit is contained in:
HeuJung
2026-08-17 17:04:44 +09:00
parent 60652fdc07
commit 3ebbda5d86
236 changed files with 6324 additions and 437 deletions
@@ -4,10 +4,11 @@
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
## [1.0.3] - 2026-08-12
## [1.0.3] - 2026-08-17
### Added
- 답글 삭제 정책(reply_delete_policy) 설정 라벨·옵션·차단 안내 문구의 일본어 번역을 추가했습니다.
- 게시판 유형 삭제 등 관리 작업이 서버 오류로 실패했을 때 표시되는 안내 문구의 일본어 번역을 추가했습니다.
- 비공개(비밀) 게시글 목록 마스킹 시 표시되는 제목 플레이스홀더(`secret_post_title`)의 일본어 번역을 추가했습니다.
- 첨부 영구 정리 설정의 라벨·도움말과 검증 항목명 일본어 번역을 추가했습니다 (`admin/settings.attachment_purge_*`, `validation.attributes.attachment_settings.*`) — 게시판 환경설정 > 기본 설정의 새 항목과 저장 시 오류 안내가 일본어 로케일에서 표시됩니다.
@@ -71,6 +71,7 @@ return [
'use_comment' => 'コメント使用',
'use_reply' => '返信使用',
'max_reply_depth' => '最大返信深度',
'reply_delete_policy' => '返信の削除方式',
'use_report' => '通報使用',
'use_file_upload' => 'ファイルアップロード使用',
'max_file_size' => '最大ファイルサイズ',
@@ -6,6 +6,10 @@ return [
'enabled' => '選択使用',
'always' => '必須使用',
],
'reply_delete_policy' => [
'block' => '削除をブロック(返信がある間は元の投稿を削除できません)',
'cascade' => '一緒に削除(元の投稿の削除時に返信も削除されます)',
],
'order_direction' => [
'asc' => '昇順',
'desc' => '降順',
@@ -219,6 +219,9 @@ return [
'notice_not_allowed' => 'お知らせには返信を作成することはできません。',
],
'reply_not_allowed' => 'この掲示板は返信機能が無効化されています。',
'delete' => [
'has_replies' => '返信が付いた投稿は削除できません。先に返信を削除してください。',
],
'status' => [
'in' => '無効な投稿ステータスです。',
],
@@ -256,6 +259,7 @@ return [
'basic_defaults.use_comment' => 'コメント使用有無',
'basic_defaults.use_reply' => '返信使用有無',
'basic_defaults.max_reply_depth' => '最大返信深さ',
'basic_defaults.reply_delete_policy' => '返信の削除方式',
'basic_defaults.max_comment_depth' => '最大コメント深さ',
'basic_defaults.comment_order' => 'コメント並べ替え',
'basic_defaults.show_view_count' => '閲覧数表示',
@@ -339,6 +343,7 @@ return [
'override_values.per_page' => 'ページあたりの投稿数',
'override_values.per_page_mobile' => 'モバイルページあたりの投稿数',
'override_values.max_reply_depth' => '最大返信深さ',
'override_values.reply_delete_policy' => '返信の削除方式',
'override_values.max_comment_depth' => '最大コメント深さ',
'override_values.min_title_length' => '最小タイトル長',
'override_values.max_title_length' => '最大タイトル長',
@@ -110,6 +110,14 @@
"label": "返信投稿の最大深さ",
"hint": "{{min}}~{{max}}の範囲内の値を入力してください"
},
"reply_delete_policy": {
"label": "返信の削除方式",
"hint": "返信が付いた投稿を削除するときの動作を設定します",
"options": {
"block": "削除をブロック",
"cascade": "一緒に削除"
}
},
"max_comment_depth": {
"label": "返信への返信の最大深さ",
"hint": "{{min}}~{{max}}の範囲内の値を入力してください。0に設定すると返信への返信機能が無効化されます。"
@@ -80,6 +80,7 @@
"max_content_length": "最大投稿文字数",
"use_reply": "回答投稿の使用",
"max_reply_depth": "回答投稿の最大深さ",
"reply_delete_policy": "返信の削除方式",
"use_comment": "コメントの使用",
"comment_order": "コメント並べ替え順序",
"min_comment_length": "最小コメント文字数",
@@ -168,6 +169,7 @@
"max_content_length": "投稿本文の最大文字数を設定します ({{min}}~{{max}})",
"use_reply": "ON に設定する必要があります。新規掲示板に返信投稿機能が適用されます。",
"max_reply_depth": "返信投稿の最大ネスト深さを設定します ({{min}}~{{max}})",
"reply_delete_policy": "返信が付いた投稿を削除するときの動作を設定します",
"blocked_keywords": "登録されたキーワードを含む投稿/コメントは作成がブロックされます",
"use_comment": "ON に設定する必要があります。新規掲示板にコメント機能が適用されます。以下のコメント詳細設定も一緒に適用されます。",
"comment_order": "コメントのデフォルト並べ替え方向を設定します",
@@ -203,6 +205,10 @@
"enabled": "選択可能",
"always": "常に非公開"
},
"reply_delete_policy": {
"block": "削除をブロック",
"cascade": "一緒に削除"
},
"order_by": {
"created_at": "最新順",
"view_count": "閲覧数順",
@@ -286,6 +292,7 @@
"use_comment": "コメント使用",
"use_reply": "返信コメント使用",
"max_reply_depth": "返信コメント最大深さ",
"reply_delete_policy": "返信の削除方式",
"max_comment_depth": "返信の返信最大深さ",
"comment_order": "コメント並べ替え順序",
"show_view_count": "閲覧数表示",
@@ -4,11 +4,12 @@
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
## [1.1.1] - 2026-08-12
## [1.1.1] - 2026-08-17
### Added
- 확정 불가 상태의 주문 옵션 구매확정 시도 안내(`exceptions.order_option_not_confirmable`)의 일본어 번역을 추가했습니다.
- 이미 답변된 상품 문의에 답변을 재등록할 때의 거절 안내(`inquiries.reply_already_exists`) 일본어 번역을 추가했습니다.
- 이용할 수 없는 결제수단 선택 시의 주문 거절 안내 일본어 번역을 추가했습니다 (`validation.order.payment_method_unavailable`).
- 관리자 주문설정 결제수단 목록의 「지정 PG 삭제됨」 배지 일본어 번역을 추가했습니다.
- 배송지 변경 처리 중 서버 오류가 발생했을 때 표시되는 안내 문구의 일본어 번역을 추가했습니다.
@@ -1100,6 +1100,7 @@ return [
'board_changed' => '掲示板設定が変更されたため、該当する投稿が見つかりません。管理者にお問い合わせください。',
'reply_created' => '返信が登録されました。',
'reply_failed' => '返信登録に失敗しました。',
'reply_already_exists' => 'すでに登録された回答があります。既存の回答を修正または削除してから再度登録してください。',
'reply_updated' => '返信が編集されました。',
'reply_update_failed' => '回答の編集に失敗しました。',
'reply_deleted' => '回答が削除されました。',
@@ -4,10 +4,11 @@
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
## [1.1.1] - 2026-08-14
## [1.1.1] - 2026-08-17
### Added
- 에스크로 배송등록·구매거절확인 검증 안내 문구(운송장번호·택배사·기본 확인자명)의 일본어 번역을 추가했습니다.
- 결제 처리 실패 안내 문구의 일본어 번역을 추가했습니다 — 일본어 로케일에서 결제가 실패했을 때 한국어 안내가 보이던 문제가 해소됩니다.
## [1.1.0] - 2026-08-10
@@ -40,6 +40,11 @@ return [
'cash_receipt' => [
'provider_name' => 'KGイニシス',
],
'escrow' => [
'invoice_required' => '送り状番号を入力してください。',
'courier_required' => '配送業者を選択してください。',
'default_confirmer' => '管理者',
],
'cbt_cvs' => [
'simulate_success' => '入金シミュレーションが完了しました。',
'simulate_failed' => '入金シミュレーションに失敗しました。',
@@ -4,10 +4,11 @@
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
## [1.0.3] - 2026-08-14
## [1.0.3] - 2026-08-17
### Added
- 에스크로 배송등록 검증 안내 문구(운송장번호·택배사)의 일본어 번역을 추가했습니다.
- 결제 처리 실패 안내 문구의 일본어 번역을 추가했습니다 — 일본어 로케일에서 결제가 실패했을 때 한국어 안내가 보이던 문제가 해소됩니다.
- 결제 취소에 필요한 서버 IP 등록 안내의 일본어 번역을 추가했습니다 — 등록이 필요한 이유, 상점 관리자에서의 등록 경로, 등록할 IP 확인·복사 안내가 일본어로 표시됩니다.
- 관리자 결제 상세의 결제 상태·취소 금액·취소 일시·환불 상태·환불 번호 항목명과, 취소 완료·부분 취소 상태 표시의 일본어 번역을 추가했습니다.
@@ -6,6 +6,10 @@ return [
'default_reason' => '購入者返金リクエスト',
'in_progress' => 'NHN KCP 返金はすでに処理中です。',
],
'escrow' => [
'invoice_required' => '送り状番号を入力してください。',
'courier_required' => '配送業者を選択してください。',
],
'errors' => [
'payment_failed' => '決済処理に失敗しました。しばらく後にもう一度お試しください。',
'wsdl_missing' => 'KCP WSDL ファイルがありません: :file',
@@ -4,6 +4,16 @@
형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르며,
[Semantic Versioning](https://semver.org/lang/ko/)을 준수합니다.
## [1.0.3] - 2026-08-17
### Added
- 가상계좌 환불 입력 필드 표시명(거래 ID·주문번호·취소 금액·취소 사유·환불 계좌번호·은행코드·예금주)의 일본어 번역을 추가했습니다.
### Removed
- 원본 플러그인에서 삭제된 가상계좌 환불 필수값 안내 문구(`errors.vbank_refund_required_fields`)를 함께 정리했습니다 — 개별 필드 검증 메시지로 대체되었습니다.
## [1.0.2] - 2026-08-10
### Changed
@@ -6,7 +6,6 @@ return [
'order_not_found' => '注文が見つかりません。',
'invalid_request' => '無効なリクエストです。',
'invalid_amount' => 'リクエスト金額が有効ではありません。',
'vbank_refund_required_fields' => 'TID、注文番号、返金金額、返金口座情報(口座番号·銀行コード·口座名義人)をすべて入力してください。',
'vbank_completed_requires_bank_info' => '仮想口座入金完了の場合は返金口座情報が必要です。管理者APIを通じて返金を進めてください。',
'invalid_refund_amount' => '返金金額が有効ではありません。(リクエスト::amount)',
'vbank_refund_order_not_found' => '返金する注文が見つかりません。',
@@ -21,4 +20,13 @@ return [
'defaults' => [
'vbank_refund_msg' => '仮想口座返金',
],
'fields' => [
'tid' => '取引ID(TID)',
'moid' => '注文番号',
'cancel_amt' => 'キャンセル金額',
'cancel_msg' => 'キャンセル事由',
'refund_acct_no' => '返金口座番号',
'refund_bank_cd' => '返金銀行コード',
'refund_acct_nm' => '返金口座名義人',
],
];
@@ -12,7 +12,7 @@
"en": "G7 plugin (sirsoft-pay_nicepayments) Japanese language pack (bundled)",
"ja": "G7 プラグイン (sirsoft-pay_nicepayments) 日本語 言語パック(バンドル)"
},
"version": "1.0.2",
"version": "1.0.3",
"license": "MIT",
"scope": "plugin",
"target_identifier": "sirsoft-pay_nicepayments",