xpressengine/xe-core — pull request #1055 by sejin7940 (2014-11-19 16:12:09+00:00)
Title: 파일첨부 된 글을 게시글 이동시, 사용자정의 값이 전부 삭제되는 버그 패치

관리자가 게시판의 여러글 클릭 후, '게시글 관리'의 '게시글 이동' 기능을 사용할 경우..

해당 글들에 파일이 첨부되어 있지 않는 경우에는 아무 문제가 없는데..

파일이 첨부되어 있는 글인 경우, 그 글에 사용자정의(확장변수) 값이 등록되어있던 글이면...
게시글 이동하면, 사용자정의 값이 전부 사라지는 버그가 있다. (원인 찾는데 정말 한참 걸렸습니다 ^^)
( 꽤 심각한 버그이기에, 개인적인 생각으로는 빠른 공식패치가 필요한 부분인듯..)

게시글 이동이 document.admin.controller.php 에서 moveDocumentModule 함수에서
게시글 이동시 첨부된 파일이 있는 경우..

파일폴더를 새로운 모듈에 맞추기 위해 (폴더변경)
$oFileController->deleteFile($val->file_srl); 가 실행되서 기존폴더의 파일을 삭제하게 되는데..

file.controller.php 에서 deleteFile 함수 끝부분에 보면 $oDocumentController->updateUploaedCount 함수 실행된다.
(사실 글이동시에는 논리적으로는 이 부분이 실행될 필요가 없다.)

어쨋든 updateUploaedCount 함수 실행되면서, 그 내부의 updateDocument 가 실행된다.

그런데 이 updateDocument 내부에서는
확장변수가 있는 구조라면, 무조건 확장변수 전체를 지우고, $obj->extra_vars1 같은 형태로 확장변수 값을 받아서 다시 저장된다.

이 updateDocument 는 원래 글 수정시 사용될 용도로 만들어졌고
글 수정시에는 확장변수 값이 전부 전달이 되기에 $obj->extra_vars1 형태에서는 문제가 없는데..

문제는 updateUploadedCount 함수에서 $oldDocument->variables 값이 넘어가는데..
extra_vars1 등은 칼럼의 변수 값들이 아니여서 (예전 1.4 때에서는 변수였지만. 1.7 에서는 별도 DB를 쓰기에)
게시글이동시엔, 결국 확장변수 값이 빈값이 전달되어 확장변수가 전부 다 초기화가 되어버리게 된다.

이 버그의 해결방법은 updateDocument 자체를 수정하는 방법도 있지만
이보다는, 글이동 ( moveDocumentModule ) 시 어차피 파일수가 같은데 굳이 updateDocument 가 실행되는 updateUploadedCount 를 실행시킬 필요자체가 없다

다만, deleteFile 함수는 실게 글 등록이나 수정시 파일 삭제의 경우 실행되고 이 때는 업로드파일 수 조절이 필요하기에
수정은 updateUploadedCount 쪽을 하는게 맞다.

결국, updateUploadedCount 를 실제파일수와 DB칼럼상에 기록된 파일수가 다른 경우에만 실행되게 하면 다 해결이 된다.