feat: 에디터 파일 삭제 R2 훅 추가

- delete_editor_file 이벤트 훅 구현
- cheditor5, smarteditor2 에디터에서 이미지 삭제 시 R2에서도 삭제
- 파일 경로 패턴 매칭으로 R2 키 검색 후 삭제

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
kappa
2026-01-10 17:27:47 +09:00
parent b8adee1825
commit 8a508a8f5f

View File

@@ -562,6 +562,9 @@ add_replace('get_list_thumbnail_info', 'r2_hook_list_thumbnail', 10, 2);
// 에디터 이미지 업로드 훅 (cheditor5, smarteditor2)
add_replace('get_editor_upload_url', 'r2_hook_editor_upload', 10, 3);
// 에디터 이미지 삭제 훅 (cheditor5, smarteditor2)
add_event('delete_editor_file', 'r2_hook_delete_editor_file', 10, 2);
/**
* 목록 썸네일 정보 (R2 지원)
* 메인페이지, 최근게시물, 게시판 목록 등에서 사용
@@ -874,6 +877,50 @@ function r2_hook_editor_upload($url, $savefile, $fileInfo)
return $url;
}
/**
* 에디터 파일 삭제 시 R2에서도 삭제
*
* @param string $filepath 삭제된 로컬 파일 경로
* @param bool $success 로컬 삭제 성공 여부
*/
function r2_hook_delete_editor_file($filepath, $success)
{
if (!is_r2_enabled()) {
return;
}
// 파일 경로에서 에디터 이미지 정보 추출
// 예: /var/www/html/data/editor/2601/filename.jpg
if (preg_match('/\/data\/editor\/(\d+)\/(.+)$/', $filepath, $matches)) {
$dateFolder = $matches[1];
$filename = $matches[2];
$handler = get_r2_handler();
// R2에서 해당 파일 검색 및 삭제
// 경로 패턴: users/*/editor/날짜/파일명
try {
$year = substr($dateFolder, 0, 2);
$month = substr($dateFolder, 2, 2);
$searchPattern = "editor/20{$year}-{$month}";
$objects = $handler->getAdapter()->listObjects($searchPattern, 100);
foreach ($objects as $obj) {
if (strpos($obj['Key'], $filename) !== false) {
$deleted = $handler->getAdapter()->delete($obj['Key']);
if ($deleted) {
error_log("[R2] Editor file deleted: {$obj['Key']}");
}
break;
}
}
} catch (\Exception $e) {
error_log("[R2] Editor file delete failed: " . $e->getMessage());
}
}
}
/**
* R2 연결 테스트
*