XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
출처 | sejin7940 |
---|
글 이동시 확장변수가 사라지는 현상을 발견한후, 실제 원인을 정확히 찾는데 3시간이나 걸렸다는.. ㅡㅡ;;
관리자가 게시판의 여러글 클릭 후, '게시글 관리'의 '게시글 이동' 기능을 사용할 경우..
해당 글들에 파일이 첨부되어 있지 않는 경우에는 아무 문제가 없는데..
파일이 첨부되어 있는 글인 경우, 그 글에 사용자정의(확장변수) 값이 등록되어있던 글이면...
게시글 이동하면, 사용자정의 값이 전부 사라지는 버그가 있다.
게시글 이동이 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칼럼상에 기록된 파일수가 다른 경우에만 실행되게 하면 다 해결이 된다.
실제 수정방법은... 굉장히 간단한데....
document.controller.php 에서
updateUploaedCount 함수에서
if($oldDocument != null)
를 아래처럼 수정
if($oldDocument != null && ($oldDocument->get('uploaded_count')!=$fileCount) )