sir.kr 커뮤니티 제보(Xbuilder 님 외)와 전수조사 발굴분을 코어·게시판· 이커머스·페이지·ckeditor5 전반에 반영. - 통합 검색 하이라이트: 코어 SearchHighlighter 로 원문 이스케이프 후 강조 (저장형 XSS 차단, board/ecommerce/page 3중복제 통합) - 공개 최신글·인기글·관리자 대시보드: 읽기권한 없는 게시판·블라인드·비활성 게시판 글 필터. 비밀글은 기존 공개 정책대로 제목 노출 유지(본문만 보호) - 게시판 관리 대시보드 권한 게이트, 이커머스 쿠폰 다운로드·리뷰 대상·주문옵션 확정 스코프 강화, 취소/환불 항목 검증 회원/비회원 대칭 - 만료 토큰 거부(SetLocale), 회원 탈퇴·정보관리 실패 시 내부 오류 원문 마스킹 - 예외→응답 매핑 정비(generic catch 상태코드), ckeditor 업로드 권한 게이트 정리 정책 정합 정정: 착수 계획이 "비밀글 제목 노출=취약점"으로 전제해 공개 최신글· 대시보드에 넣었던 is_secret 필터는, 저장소가 확정한 "제목 공개, 본문만 보호" 정책(2026-01-02/02-04/06-18/06-19)과 배치되어 되돌림. 읽기권한·블라인드 필터는 유지. Chrome MCP 실측(T1~T10) + 회귀 테스트로 확인.
147 lines
7.8 KiB
PHP
147 lines
7.8 KiB
PHP
<?php
|
|
|
|
return [
|
|
// Status labels
|
|
'status' => [
|
|
'active' => 'Active',
|
|
'inactive' => 'Inactive',
|
|
'blocked' => 'Blocked',
|
|
'withdrawn' => 'Withdrawn',
|
|
],
|
|
|
|
// Language labels
|
|
'language' => [
|
|
'ko' => '한국어',
|
|
'en' => 'English',
|
|
],
|
|
|
|
// User management messages
|
|
'not_found' => 'User not found.',
|
|
'withdrawn_user' => 'Deleted User',
|
|
'fetch_success' => 'User information retrieved successfully.',
|
|
'fetch_failed' => 'Failed to retrieve user information.',
|
|
'create_success' => 'User created successfully.',
|
|
'create_failed' => 'Failed to create user. Please try again later.',
|
|
'update_success' => 'User information updated successfully.',
|
|
'update_failed' => 'Failed to update user information. Please try again later.',
|
|
'delete_success' => 'User deleted successfully.',
|
|
'delete_failed' => 'Failed to delete user. Please try again later.',
|
|
'statistics_success' => 'User statistics retrieved successfully.',
|
|
'statistics_failed' => 'Failed to retrieve user statistics.',
|
|
'search_success' => 'User search completed successfully.',
|
|
'search_failed' => 'User search failed.',
|
|
'search_name_required' => 'Please enter a name to search.',
|
|
'search_keyword_required' => 'Please enter a keyword to search.',
|
|
'email_available' => 'Email is available.',
|
|
'email_unavailable' => 'Email is already in use.',
|
|
'email_required' => 'Please enter an email.',
|
|
'email_check_failed' => 'Failed to check email availability.',
|
|
'profile_success' => 'Profile information retrieved successfully.',
|
|
'profile_failed' => 'Failed to retrieve profile information.',
|
|
'language_update_success' => 'Language setting updated successfully.',
|
|
'language_update_failed' => 'Failed to update language setting.',
|
|
'invalid_language' => 'Unsupported language.',
|
|
'activity_log_success' => 'Activity log retrieved successfully.',
|
|
'activity_log_failed' => 'Failed to retrieve activity log.',
|
|
'bulk_status_updated' => ':count user(s) status updated successfully.',
|
|
'bulk_update_status_failed' => 'Failed to update user status in bulk.',
|
|
'last_admin_role_cannot_remove' => 'Cannot remove the admin role because you are the only user with the admin role in the system.',
|
|
|
|
// Avatar messages
|
|
'avatar_upload_success' => 'Profile image uploaded successfully.',
|
|
'avatar_upload_failed' => 'Failed to upload profile image.',
|
|
'avatar_delete_success' => 'Profile image deleted successfully.',
|
|
'avatar_delete_failed' => 'Failed to delete profile image.',
|
|
'avatar_not_found' => 'No profile image to delete.',
|
|
|
|
// Marketing consent messages
|
|
'marketing_consent_update_success' => 'Marketing consent settings updated successfully.',
|
|
'marketing_consent_update_failed' => 'Failed to update marketing consent settings.',
|
|
|
|
// Password verification messages
|
|
'password_verified' => 'Password verified successfully.',
|
|
'password_incorrect' => 'Password is incorrect.',
|
|
'password_verify_failed' => 'Failed to verify password.',
|
|
|
|
// Password change messages
|
|
'password_change_success' => 'Password changed successfully.',
|
|
'password_change_failed' => 'Failed to change password.',
|
|
|
|
// Withdraw messages
|
|
'withdraw_success' => 'Account withdrawal completed successfully.',
|
|
'withdraw_failed' => 'Failed to withdraw account. Please try again later.',
|
|
'withdraw_admin_forbidden' => 'Administrator account cannot be withdrawn.',
|
|
'withdraw_failed_unknown' => 'Withdrawal failed due to an unknown error.',
|
|
|
|
// Validation messages
|
|
'validation' => [
|
|
'page_integer' => 'Page number must be an integer.',
|
|
'page_min' => 'Page number must be at least 1.',
|
|
'per_page_integer' => 'Items per page must be an integer.',
|
|
'per_page_min' => 'Items per page must be at least 1.',
|
|
'per_page_max' => 'Items per page must not exceed 100.',
|
|
'search_string' => 'Search term must be a string.',
|
|
'search_max' => 'Search term must not exceed 255 characters.',
|
|
'search_field_invalid' => 'Invalid search field.',
|
|
'start_date_invalid' => 'Invalid start date format.',
|
|
'end_date_invalid' => 'Invalid end date format.',
|
|
'end_date_after_start' => 'End date must be after start date.',
|
|
'date_filter_invalid' => 'Invalid date filter.',
|
|
'sort_by_invalid' => 'Invalid sort field.',
|
|
'sort_order_invalid' => 'Invalid sort order.',
|
|
'name_required' => 'Name is required.',
|
|
'name_string' => 'Name must be a string.',
|
|
'name_max' => 'Name must not exceed 255 characters.',
|
|
'nickname_string' => 'Nickname must be a string.',
|
|
'nickname_max' => 'Nickname must not exceed 50 characters.',
|
|
'email_required' => 'Email is required.',
|
|
'email_invalid' => 'Invalid email format.',
|
|
'email_unique' => 'Email is already in use.',
|
|
'email_max' => 'Email must not exceed 255 characters.',
|
|
'password_required' => 'Password is required.',
|
|
'password_confirmed' => 'Password confirmation does not match.',
|
|
'password_min' => 'Password must be at least 8 characters.',
|
|
'current_password_required' => 'Current password is required.',
|
|
'current_password_invalid' => 'Current password is incorrect.',
|
|
'password_confirmation_required' => 'Password confirmation is required.',
|
|
'language_required' => 'Please select a language.',
|
|
'language_invalid' => 'Unsupported language.',
|
|
'country_required' => 'Please select a country.',
|
|
'country_size' => 'Country code must be exactly 2 characters.',
|
|
'country_alpha' => 'Country code must contain only letters.',
|
|
'timezone_invalid' => 'Please select a valid timezone.',
|
|
'status_invalid' => 'Invalid account status.',
|
|
'homepage_url' => 'Invalid URL format.',
|
|
'homepage_max' => 'Homepage URL must not exceed 255 characters.',
|
|
'mobile_max' => 'Mobile number must not exceed 20 characters.',
|
|
'mobile_regex' => 'Mobile number can only contain numbers, hyphens, and spaces.',
|
|
'phone_max' => 'Phone number must not exceed 20 characters.',
|
|
'phone_regex' => 'Phone number can only contain numbers, hyphens, and spaces.',
|
|
'avatar_required' => 'Please select a profile image.',
|
|
'avatar_image' => 'Profile image must be an image file.',
|
|
'avatar_mimes' => 'Profile image must be JPG, PNG, GIF, or WEBP format.',
|
|
'avatar_max' => 'Profile image must not exceed 2MB.',
|
|
'zipcode_max' => 'Zipcode must not exceed 10 characters.',
|
|
'address_max' => 'Address must not exceed 255 characters.',
|
|
'address_detail_max' => 'Address detail must not exceed 255 characters.',
|
|
'signature_max' => 'Signature must not exceed 1000 characters.',
|
|
'bio_max' => 'Bio must not exceed 5000 characters.',
|
|
'admin_memo_max' => 'Admin memo must not exceed 5000 characters.',
|
|
// Role information
|
|
'roles_required' => 'Please select at least one role.',
|
|
'roles_min' => 'Please select at least one role.',
|
|
// Multiple search filter messages
|
|
'filters_array' => 'Filters must be an array.',
|
|
'filters_max' => 'Maximum of 10 filters allowed.',
|
|
'filter_field_required' => 'Filter field is required.',
|
|
'filter_field_invalid' => 'Invalid filter field.',
|
|
'filter_value_required' => 'Filter value is required.',
|
|
'filter_value_max' => 'Filter value must not exceed 255 characters.',
|
|
'filter_operator_invalid' => 'Invalid filter operator.',
|
|
'search_name_required' => 'Please enter a name to search.',
|
|
'search_keyword_required' => 'Please enter a keyword to search.',
|
|
'exclude_user_id_uuid' => 'Exclude user ID must be a valid UUID.',
|
|
'exclude_user_id_exists' => 'The specified user does not exist.',
|
|
],
|
|
];
|