Skip to content

Release 0.1.20

Choose a tag to compare

@kagla kagla released this 31 May 12:32

새 기능 — 스키마 기반 사이트 설정 관리 (/admin/setting)

PHP 코드 한 곳에 모든 설정 그룹의 키·필드·타입을 선언하면 admin 은 값만 편집하는 구조. 사이트 간 키 일관성 보장.

핵심

  • 단일 진실: app/lib/setting.lib.phpSETTINGS_SCHEMA 상수에 모든 그룹 선언. 새 그룹 추가 = 배열 항목 하나 추가
  • DB: g5_setting 테이블 (s_key, s_value LONGTEXT JSON, 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.phpsetting('smtp')['host'] 가 비어있지 않으면 그 그룹의 값으로 PHPMailer 구성, 비어있으면 G5_SMTP_* 상수 fallback, 그것도 없으면 PHP mail().

Gmail / Naver 두 공급자의 설정 가이드 (2단계 인증 + 앱 비밀번호 흐름, 공식 페이지 직접 링크 포함) 가 스키마의 notes 에 내장.

부가

  • /admin/db_migrateg5_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']. 끝.