diff --git a/extend/r2_hooks.php b/extend/r2_hooks.php index c7b0e04..186086d 100644 --- a/extend/r2_hooks.php +++ b/extend/r2_hooks.php @@ -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 연결 테스트 *