게시판:자유게시판의 토론 주제

5번째 줄: 5번째 줄:
## 기록을 출력하는 법은 미디어위키위키에 쉽게 잘 나와있었습니다([[mediawikiwiki:Manual:Logging_to_Special:Log|#]]).
## 기록을 출력하는 법은 미디어위키위키에 쉽게 잘 나와있었습니다([[mediawikiwiki:Manual:Logging_to_Special:Log|#]]).
# [[mediawikiwiki:Manual:Hooks/UserSaveSettings|UserSaveSettings]]라는 hook이 있는데 이 hook에서는 User 변수 하나에만 접근할 수 있고 이 유저 변수는 이미 변경된 환경설정이 반영된 settings만을 확인할 수 있습니다. 즉 이 hook에서는 변경되었는지 안 되었는지와 무관하게 무조건 현재 realname만 참조할 수 있었습니다.([[mediawikiwiki:Manual:Hooks/UserSaveOptions|UserSaveOptions]]에서 nickname을 참조해도 마찬가지입니다)
# [[mediawikiwiki:Manual:Hooks/UserSaveSettings|UserSaveSettings]]라는 hook이 있는데 이 hook에서는 User 변수 하나에만 접근할 수 있고 이 유저 변수는 이미 변경된 환경설정이 반영된 settings만을 확인할 수 있습니다. 즉 이 hook에서는 변경되었는지 안 되었는지와 무관하게 무조건 현재 realname만 참조할 수 있었습니다.([[mediawikiwiki:Manual:Hooks/UserSaveOptions|UserSaveOptions]]에서 nickname을 참조해도 마찬가지입니다)
# [[mediawikiwiki:Manual:Hooks/SavePreferences|SavePreferences]]라는 hook에서는 $old라는 이름으로 이전 prefereneces를 참조할 수 있었던 것 같은데(그럼 $old와 new를 비교해서 realname은 비교를 못해도 nickname은 비교할 수 있었을텐데<sup>[리얼네임 확장기능을 realname field 대신 nickname field(현재는 서명이 저장되는 곳)을 사용하도록 변경하는 것은 간단하게 가능합니다].</sup>), 이 hook이 미디어위키 1.16.0.에서 제거되었고 UserSaveOptions으로 대체되었다고 합니다.
# [[mediawikiwiki:Manual:Hooks/SavePreferences|SavePreferences]]라는 hook에서는 $old라는 이름으로 이전 prefereneces를 참조할 수 있었던 것 같은데(그럼 $old와 new를 비교해서 realname은 비교를 못해도 nickname은 비교할 수 있었을텐데<sup>[리얼네임 확장기능을 realname field 대신 nickname field(현재는 서명이 저장되는 곳)을 사용하도록 변경하는 것은 간단하게 가능합니다].</sup>), 이 hook이 미디어위키 1.16.0.에서 제거되었고 UserSaveOptions으로 대체되었다고 합니다. UserSaveOptions에는 $old와 같은 변수가 없습니다.
# 환경설정을 통해 DB에 realname를 갱신하는 부분에 적절한 hook이 있는가 찾아보았습니다. User class의 [https://doc.wikimedia.org/mediawiki-core/1.27.1/php/classUser.html#ac58b30a22b3fb746bb03ea788b7d0ebc saveSettings() 함수]([https://doc.wikimedia.org/mediawiki-core/1.27.1/php/User_8php_source.html#l03767 소스])는 바로 db의 update문에 대한 wrapping function를 호출하며, Setting의 전후 값을 동시에 전달받는 hook은 없어 보입니다.
# 환경설정을 통해 DB에 realname을 갱신하는 부분에 적절한 hook이 있는가 찾아보았습니다. User class의 [https://doc.wikimedia.org/mediawiki-core/1.27.1/php/classUser.html#ac58b30a22b3fb746bb03ea788b7d0ebc saveSettings() 함수]([https://doc.wikimedia.org/mediawiki-core/1.27.1/php/User_8php_source.html#l03767 소스])는 바로 db의 update문에 대한 wrapping function를 호출하며, Setting의 전후 값을 동시에 전달받는 hook은 없어 보입니다.
## 대신해서 [https://doc.wikimedia.org/mediawiki-core/1.27.1/php/classDatabaseBase.html#af5f56f8c7220cb3f405a51663d524d25 update wrapping function]([https://doc.wikimedia.org/mediawiki-core/1.27.1/php/Database_8php_source.html#l01503 소스]) 안에 적절한 hook이 있는가 살펴봤는데 없습니다.
## 대신해서 [https://doc.wikimedia.org/mediawiki-core/1.27.1/php/classDatabaseBase.html#af5f56f8c7220cb3f405a51663d524d25 update wrapping function]([https://doc.wikimedia.org/mediawiki-core/1.27.1/php/Database_8php_source.html#l01503 소스]) 안에 적절한 hook이 있는가 살펴봤는데 없습니다.
그래서  
그래서  
17번째 줄: 17번째 줄:
아니면
아니면
* [[특수:환경설정]]을 변조해서 '저장'을 누를 때 실제로 저장하기 직전에 realname을 비교하기
* [[특수:환경설정]]을 변조해서 '저장'을 누를 때 실제로 저장하기 직전에 realname을 비교하기
** 이 경우에 [[특수:환경설정]]이 아닌 다른 방법(api를 써서 변경한다든가…)로 realname을 변경하면 기록이 남지 않는다는 문제가 생기지만 전 이 문제를 무시할 것입니다.
* 이 경우에 [[특수:환경설정]]이 아닌 다른 방법(api를 써서 변경한다든가…)로 realname을 변경하면 기록이 남지 않는다는 문제가 생기지만 전 이 문제를 무시할 것입니다.
아니면
아니면
* UserSaveSettings hook에서 realname이 변경되었든 아니든 그냥 무조건 기록으로 남기기
* UserSaveSettings hook에서 realname이 변경되었든 아니든 그냥 무조건 기록으로 남기기