Release 0.1.20
새 기능 — 스키마 기반 사이트 설정 관리 (/admin/setting)
PHP 코드 한 곳에 모든 설정 그룹의 키·필드·타입을 선언하면 admin 은 값만 편집하는 구조. 사이트 간 키 일관성 보장.
핵심
- 단일 진실:
app/lib/setting.lib.php의SETTINGS_SCHEMA상수에 모든 그룹 선언. 새 그룹 추가 = 배열 항목 하나 추가 - DB:
g5_setting테이블 (s_key,s_value LONGTEXTJSON,s_updated_at). 그룹 1개 = row 1개. 새 그룹 추가 시 DDL 불필요 - 헬퍼 3 함수:
setting($key)— 스키마 defaults 와 저장값 array_merge (lazy SELECT, 스키마 외 키 자동 제거)setting_put($key, $values)— JSON UPSERT (부분 갱신 — password 빈입력=유지 지원)setting_schemas()— admin 페이지가 사용
Admin UI
- 2 모드:
/admin/setting목록 (저장 상태 뱃지 + 편집 링크) →/admin/setting?key=<group>편집 (← 목록으로) - 필드 타입 5종: text, number, select, bool, password
- 검증: required, number min/max, select 옵션 화이트리스트
- password 특수: 폼은 항상 마스크, 빈 입력 시 기존 값 유지
- 세션 flash 토스트 — URL 에 액션 흔적 없음 (위조된
?saved=KEY/?reset=KEY링크로 admin 속이는 시나리오 차단) - 스키마
notes필드 (HTML):<details>/<summary>네이티브 토글로 편집 화면에 가이드 박스 (다른 스키마도 자동 지원) - 다크모드:
--slate-*토큰 +[data-theme="dark"]명시 오버라이드 - 좌측 메뉴:
환경설정 > 설정 관리(code 100150) - CSRF: gnuboard 네이티브
get_admin_token()/check_admin_token()사용
첫 등록 스키마 — SMTP 메일 발송
6 필드 (host / port / secure / auth / user / pass). mailer.lib.php 가 setting('smtp')['host'] 가 비어있지 않으면 그 그룹의 값으로 PHPMailer 구성, 비어있으면 G5_SMTP_* 상수 fallback, 그것도 없으면 PHP mail().
Gmail / Naver 두 공급자의 설정 가이드 (2단계 인증 + 앱 비밀번호 흐름, 공식 페이지 직접 링크 포함) 가 스키마의 notes 에 내장.
부가
/admin/db_migrate에g5_setting카드 (테이블 생성 액션). DROP TABLE 액션은 운영 중 의미가 없어 제외
새 설정 그룹 추가법
// app/lib/setting.lib.php
const SETTINGS_SCHEMA = [
'smtp' => [ /* ... */ ],
'my_feature' => [
'title' => '내 기능',
'description' => '설명',
'fields' => [
'api_key' => ['label' => 'API Key', 'type' => 'password', 'default' => '', 'required' => true],
],
],
];호출 측: setting('my_feature')['api_key']. 끝.