이 게시물의 하나의 판에 대한 영구 링크 입니다.
이 판은 2017년 9월 6일 (수) 것이며 그 이전 판과의 차이를 볼 수 있고 게시물 역사 문서에서는 다른 판들도 볼 수 있습니다.
사족 근황 겸 혹시 해서 질문입니다:
'닉네임 변경 이력을 기록으로 남게 하기'를 만들려고 하는데, '닉네임이 변경되는 시점'을 감지하는 것을 잘 하지 못하겠습니다,
- 변경 이력은 '만약 user settings중에 하나인 realname을 변경하였다면, 변경되기 전 realname과 변경된 realname을 기록으로 남긴다'가 좋을 것 같았습니다.
- 기록을 출력하는 법은 미디어위키위키에 쉽게 잘 나와있었습니다(#).
- UserSaveSettings라는 hook이 있는데 이 hook에서는 User 변수 하나에만 접근할 수 있고 이 유저 변수는 이미 변경된 환경설정이 반영된 settings만을 확인할 수 있습니다. 즉 이 hook에서는 변경되었는지 안 되었는지와 무관하게 무조건 현재 realname만 참조할 수 있었습니다.(UserSaveOptions에서 nickname을 참조해도 마찬가지입니다)
- SavePreferences라는 hook에서는 $old라는 이름으로 이전 prefereneces를 참조할 수 있었던 것 같은데(그럼 $old와 new를 비교해서 realname은 비교를 못해도 nickname은 비교할 수 있었을텐데[리얼네임 확장기능을 realname field 대신 nickname field(현재는 서명이 저장되는 곳)을 사용하도록 변경하는 것은 간단하게 가능합니다].), 이 hook이 미디어위키 1.16.0.에서 제거되었고 UserSaveOptions으로 대체되었다고 합니다. UserSaveOptions에는 $old와 같은 변수가 없습니다.
- 환경설정을 통해 DB에 realname을 갱신하는 부분에 적절한 hook이 있는가 찾아보았습니다. User class의 saveSettings() 함수(소스)는 바로 db의 update문에 대한 wrapping function를 호출하며, Setting의 전후 값을 동시에 전달받는 hook은 없어 보입니다.
- 대신해서 update wrapping function(소스) 안에 적절한 hook이 있는가 살펴봤는데 없습니다.
그래서
- 환경설정 변경시점에
- 로그를 찾아서 이전에 닉네임을 변경한 로그가 있으면
- 그것을 현재 닉네임과 비교해서 그 값이 다르면
- 기록을 출력
- 없으면 가입했을 때 닉네임을 찾아서[찾을 수 있는지 모르겠음] 그것을 현재 닉네임과 비교해서 그 값이 다르면
- 기록을 출력
- 그것을 현재 닉네임과 비교해서 그 값이 다르면
- 로그를 찾아서 이전에 닉네임을 변경한 로그가 있으면
아니면
- 특수:환경설정을 변조해서 '저장'을 누를 때 실제로 저장하기 직전에 realname을 비교하기
- 이 경우에 특수:환경설정이 아닌 다른 방법(api를 써서 변경한다든가…)로 realname을 변경하면 기록이 남지 않는다는 문제가 생기지만 전 이 문제를 무시할 것입니다.
아니면
- UserSaveSettings hook에서 realname이 변경되었든 아니든 그냥 무조건 기록으로 남기기
을 생각하고 있습니다.
근데 뭔가 삽질 같아서… 누군가 저를 도와 주시면 제가 기프티콘이라도……드리겠습니다ㅠㅠㅠㅠ