원본 애드온 : 첨부파일을 외부로! ver. 0.0.3
패치 파일 : lua_external_file-v0.3.0.zip
============================ 패치 이력 ======================
# lua_external_file 변경 이력
## v0.3.0 (2026-06-24) — BSplus 전면 리빌드
원본 LuaCast 버전(2015, PHP 5.x / XE 구버전)을 PHP 7.4~8.x + Rhymix 2.1+ 환경에 맞게 전면 재작성.
### 핵심 기능 추가
- **폴더 지정 방식 도입**: 관리자가 저장 폴더 경로를 직접 설정 (원본은 코드에 하드코딩)
- **절대경로 + 상대경로 모두 지원**: `/mnt/nas` 같은 절대경로와 `../../private_uploads` 같은 XE 루트 기준 상대경로 모두 동작
- **CDN 서빙 URL 옵션**: 이동된 파일을 외부 CDN URL로 리다이렉트 (Rhymix 권한 체크 우회용)
- **복구 기능 추가**: 이동된 파일 전체를 원래 XE 경로로 되돌리는 관리자 기능
- AJAX 방식의 파일 목록·선택 복구·전체 복구 UI
- 애드온 설정 페이지 내 탭으로 통합 (별도 페이지 불필요)
### 버그 수정 / 호환성
- **크로스 드라이브 이동 실패 해결**: Windows에서 `rename()`이 드라이브 간 이동 시 실패하는 문제 → `copy()` + `unlink()` 폴백 적용 (파일 이동·복구 양쪽 모두)
- **DB 이중 prefix 버그 수정**: `DB::getInstance()->query()` 사용 시 `xe_xe_files` 같은 이중 prefix 발생 → raw PDO(`getHandle()`) + `config('db.master.prefix')` 방식으로 교체
- **Rhymix 라우팅 오류 해결**: `lua_ext_restore` 액트가 카멜케이스 검증에 걸려 `msg_invalid_request` 발생 → `before_module_init`에서 라우팅 검증 이전에 가로채도록 변경
- **함수 재선언 오류 방지**: 애드온이 position별로 여러 번 include 되는 Rhymix 특성 → 관리자 로직을 별도 클래스(`LefAdmin`)로 분리 + `require_once` 적용
- **CDN URL 헤더 인젝션 방지**: 개행 문자(`\r\n`) 제거 처리 추가
### 구조 변경
- **관리자 설정 UI**: `after_module_proc` 훅에서 `setTemplatePath()`·`setTemplateFile()`로 기본 설정 템플릿을 커스텀 탭 UI로 교체
- **복구 로직 분리**: `admin/restore.php` (`LefAdmin` 클래스)로 독립 — AJAX scan / restore / restore_one 엔드포인트 통합
- **보안**: DB 접속 비밀번호 하드코딩 코드 제거
---
## v0.1.x (2015) — LuaCast 원본
- XE 1.x / PHP 5.x 기반
- 첫 다운로드 시 파일을 지정 경로로 이동하는 기본 기능
===================================================================================


장점 : 자신의 홈페이지 용량이 늘지 않습니다.
첨부파일이 전부 정해진 저장공간에 쌓입니다.
파일 복구 탭은 파일을 다시 홈페이지 원래 방식대로 돌리는 기능입니다.

