diff --git a/classes/file/FileHandler.class.php b/classes/file/FileHandler.class.php index f32811b8e..72c65984a 100644 --- a/classes/file/FileHandler.class.php +++ b/classes/file/FileHandler.class.php @@ -157,6 +157,25 @@ @rmdir($path); } + /** + * @brief 지정된 디렉토리에 내용이 없으면 삭제 + **/ + function removeBlankDir($path) { + $item_cnt = 0; + + $path = FileHandler::getRealPath($path); + if(!is_dir($path)) return; + $directory = dir($path); + while($entry = $directory->read()) { + if ($entry == "." || $entry == "..") continue; + if (is_dir($path."/".$entry)) $item_cnt = FileHandler::removeBlankDir($path.'/'.$entry); + } + $directory->close(); + + if($item_cnt < 1) @rmdir($path); + } + + /** * @biref 지정된 디렉토리를 제외한 모든 파일을 삭제 **/ diff --git a/modules/file/file.admin.controller.php b/modules/file/file.admin.controller.php index 48c1709e9..cc984d708 100644 --- a/modules/file/file.admin.controller.php +++ b/modules/file/file.admin.controller.php @@ -17,15 +17,34 @@ * @brief 특정 모두의 첨부파일 모두 삭제 **/ function deleteModuleFiles($module_srl) { + // 전체 첨부파일 목록을 구함 + $args->module_srl = $module_srl; + $output = executeQuery('file.getModuleFiles',$args); + if(!$output) return $output; + $files = $output->data; + + // DB에서 삭제 $args->module_srl = $module_srl; $output = executeQuery('file.deleteModuleFiles', $args); if(!$output->toBool()) return $output; - // 실제 파일 삭제 - $path[0] = sprintf("./files/attach/images/%s/", $module_srl); - $path[1] = sprintf("./files/attach/binaries/%s/", $module_srl); - FileHandler::removeDir($path[0]); - FileHandler::removeDir($path[1]); + // 실제 파일 삭제 (일단 약속에 따라서 한번에 삭제) + FileHandler::removeDir( sprintf("./files/attach/images/%s/", $module_srl) ) ; + FileHandler::removeDir( sprintf("./files/attach/binaries/%s/", $module_srl) ); + + // DB에서 구한 파일 목록을 삭제 + $path = array(); + $cnt = count($files); + for($i=0;$i<$cnt;$i++) { + $uploaded_filename = $files[$i]->uploaded_filename; + FileHandler::removeFile($uploaded_filename); + + $path_info = pathinfo($uploaded_filename); + if(!in_array($path_info['dirname'], $path)) $path[] = $path_info['dirname']; + } + + // 해당 글의 첨부파일 디렉토리 삭제 + for($i=0;$itoBool()) return $output; // 실제 파일 삭제 + $path = array(); $file_count = count($file_list); - for($i=0;$iuploaded_filename; + FileHandler::removeFile($uploaded_filename); $module_srl = $file_list[$i]->module_srl; - $path[0] = sprintf("./files/attach/images/%s/%s/", $module_srl, $upload_target_srl); - $path[1] = sprintf("./files/attach/binaries/%s/%s/", $module_srl, $upload_target_srl); - FileHandler::removeDir($path[0]); - FileHandler::removeDir($path[1]); + $path_info = pathinfo($uploaded_filename); + if(!in_array($path_info['dirname'], $path)) $path[] = $path_info['dirname']; } + // 해당 글의 첨부파일 디렉토리 삭제 + for($i=0;$i + + + + + + +