특정 게시판에서 임시저장글 불러오기 하면 임시저장한 시간으로 글이 올라갑니다
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.4 |
글쓰기 하단에 있는 임시저장 & 불러오기로 글을 등록하면, 임시저장한 시간대로 글이 올라갑니다.
저 불러오기를 누르면
이렇게 임시 저장한 글을 고를 수 있고, 선택을 누르면 임시저장글을 수정하거나 등록할 수 있는 구조 입니다.
이렇게 임시 저장글을 등록하면 최신 글로 등록되야 하는데 임시저장을 한 시점 (예를들어 열흘전인 3.07) 에 {n} 방금 << 이런식으로 글이 등록 됩니다.
7시간 전에 글을 임시저장하고 글을 등록 시키면 7시간 전 위치에 글이 뜹니다.
제 사이트 문제라기엔 실험용 게시판은 정상적으로 작동이 됩니다.
혹시나 스킨, 에드온, 모듈 문제인가 싶어 동일한 환경을 만들어도 여전히 실험용 게시판은 작동이 잘되고 (임시저장후 글을 등록하면 최신 글로 뜹니다.) 정작 중요한 기존의 다른 게시판은 여전합니다.
문서 정렬은 문서 순서 오름차순 다 동일합니다. 실험용 게시판은 잘 작동하는걸 보면, 기존 게시판 srl 이 바뀌어서 인지 설정때문인지 모르겠습니다.
module-document-tpi-saved list.html 의 코드를 보면
고 write_form.html 에 있는 불러오기 코드는
이렇는데 srl 관련 부분도 안보이네요.
어느부분과 관련있을까요?
스킨 설정 이런부분은 모두 동일합니다.
대체 왜 실험용 게시판은 정상적으로 작동하는데 기존 게시판만 저럴까요... 고칠려면 어디를 봐야할까요?
저 saved list 에서 선택을 누르면 문서번호 리셋되는 그런코드 넣으면될까요?
댓글 21
같은 사이트인데 게시판 하나만 정렬 순서가 달라진다는 뜻인가요?
아니면 서로 다른 사이트인가요? (만약 다른 사이트라면 라이믹스 버전이 서로 다른가요?)
1. 정렬되는 순서가 list_order가 아니거나
2. 임시저장되었던 글을 정식 등록할 때 list_order를 끌어올려 주는 코드가 고장났거나
두 가지 가능성이 있는데, 1번은 디버그 패널을 켜보면 게시판에서 실제 사용하는 쿼리를 확인할 수 있고, 2번은 정식 등록 전후에 DB의 값을 비교해 보아야 알 수 있습니다.
만약 1번 상황이라면 게시판 목록을 다른 조건으로 변경하는 서드파티 자료 때문일 가능성이 높고, 2번 상황이라면 버전에 따른 차이이거나, 특정한 조건에서 일어나는 코어의 버그일 수도 있습니다. 혹시 문제가 일어나는 게시판에서만 동작하는 애드온이 있거나, 글쓴이의 권한(관리자, 일반 회원, 비회원)에 따라 증상이 달라지나요?
서로 다른 사이트이며 라이믹스 버전은 2 버전으로 큰차이가 없습니다. 또한 목록 정렬은 문서번호 - 오름차순입니다.
최고 관리자 권한이 있는 계정은 정상적으로 글이 등록되는데, 일반 회원은 임시저장 된 시점으로 글이 올라갑니다.
확인 감사합니다. 패치해야겠네요.
2.1.13 에도 있는 버그네요
제가 github 를 안 좋아해서 ( 사실 못 다뤄서 ) 그냥 여기 써두겠습니다 ^^
임시저장글을 불러와 저장하는건, updateDocument 로 가는데
관리자가 아니면 regdate, last_update, list_order 변수를 없애버리다보니
임시글에 대해 procBoardInsertDocument 에서 새로 부여한 list_order 값이 updateDocument 에서 사라져서
임시글을 불러와 저장할때 list_order 값이 갱신이 안 되네요
( 그런데 등록일은 갱신되는건, updateDocument 함수 끝부분에 임시글인 경우 등록일만 다시 또 갱신하거든요 ^^)
2.1.13 기준으로 document.controller.php 에서
1000번째줄의 if(!$grant->manager) 부분을
if(!$grant->manager && ($source_obj->get('status') != $this->getConfigStatus('temp')))
이렇게 바꿔서, 임시글을 불러와 등록하는 경우는
regdate, last_update, list_order 가 초기화되지 않게 하면 되네요
그 조건문을 풀어주면 임시저장글을 정식 등록하는 시점에 list_order 값을 조작해서 최상단에 영구적으로 고정시켜 버리거나, 스팸글을 관리자가 눈치채지 못하도록 아래에 숨기는 등 꼼수를 부릴 수 있게 됩니다. 그걸 막으려고 보안패치를 한 거고요.
list_order를 갱신하는 로직을 board 모듈에서 document 모듈로 옮기거나, 트리거를 사용해서 값을 세팅해 줘야겠네요.
임의로 넣어도, procBoardInsertDocument 에 임시글인 경우 자체적으로 변수값을 다시 만든뒤
그 값을 updateDocument 에 변수로 보내서 사용하는거니까 영향을 안 받지 않나요?
코드를 자세히 보니 그럴 것 같기도 한데, 정확하게 이 케이스만 잡아내려면 regdate, last_update 등 (정렬에 흔히 사용되는) 다른 컬럼들은 별도로 방어해야겠지요. board 모듈만 믿기에는 이래저래 안심이 안 됩니다. 문서를 board 모듈에서만 사용하는 것도 아니고요.
어차피 임시글을 board 모듈에서만 쓰지 않나요? ( 물론 쓰려고 하면 다른 모듈에서도 쓸수는 있겠지만 ^^)
그냥 무조건 풀어주는게 아니라, 임시글 인 경우에만 제한적으로 푸는거니
외부 영향 받을 일이 거의 없을듯 싶어서요
공통으로 쓰는 부분(updateDocument)에서 막는 것이 가장 깔끔합니다.
changed 파일을 다운받아서 적용하거나, 깃허브에서 수정 내역을 확인하시면 됩니다. 최근에 꽤 굵직한 보안패치가 몇 가지 있었으니, 안전을 위해서라도 최소한 changed 파일은 적용하시는 것이 좋습니다.
패치했습니다. https://github.com/rhymix/rhymix/commit/7c8e76b727
이렇게 수정하고 정상 작동하는지 확인해 보세요.^^
기진님. 임시저장'된' 시점으로 글이 올라갑니다.(스샷처럼) 적용한 부분은 다시 원복시켰습니다.
1분전에 올린 임시저장글인데, 임시저장된 시점으로 올라가네요