Allow member info to be customized by trigger

문서나 댓글을 작성하거나 수정할 때 트리거에서 회원 정보를 조작할 수
있도록 허용함. $obj->manual_member_info = true 로 바꾸어 반환하면
글쓴이의 정보가 현재 로그인한 사용자나 최초 작성시 정보로 덮어씌워지지
않고 트리거에서 지정한 그대로 남음.

기존에도 $manual_inserted 를 사용하면 이런 기능을 구현할 수 있었으나,
이 변수는 트리거에서 조작할 수 없으며 다른 체크도 모두 건너뛰는 등
여러 가지 불편이 있어서 이렇게 일부 정보만 변경하도록 허용하는 새 방법을
제공함. 익명 게시판 등을 좀더 편리하게 개발할 수 있을 것으로 예상됨.
This commit is contained in:
Kijin Sung 2017-11-24 23:42:28 +09:00
parent 17ca61eed3
commit 509b403eff
2 changed files with 11 additions and 7 deletions

View file

@ -401,6 +401,7 @@ class documentController extends document
unset($obj->_saved_doc_title);
unset($obj->_saved_doc_content);
unset($obj->_saved_doc_message);
unset($obj->manual_member_info);
// Call a trigger (before)
$output = ModuleHandler::triggerCall('document.insertDocument', 'before', $obj);
if(!$output->toBool()) return $output;
@ -430,7 +431,7 @@ class documentController extends document
}
// Insert member's information only if the member is logged-in and not manually registered.
$logged_info = Context::get('logged_info');
if(Context::get('is_logged') && !$manual_inserted && !$isRestore)
if(Context::get('is_logged') && !$manual_inserted && !$isRestore && !$obj->manual_member_info)
{
$obj->member_srl = $logged_info->member_srl;
@ -575,6 +576,7 @@ class documentController extends document
}
// Call a trigger (before)
unset($obj->manual_member_info);
$output = ModuleHandler::triggerCall('document.updateDocument', 'before', $obj);
if(!$output->toBool()) return $output;
@ -658,7 +660,7 @@ class documentController extends document
// If an author is identical to the modifier or history is used, use the logged-in user's information.
$logged_info = Context::get('logged_info');
if(Context::get('is_logged') && !$manual_updated)
if(Context::get('is_logged') && !$manual_updated && !$obj->manual_member_info)
{
if($source_obj->get('member_srl')==$logged_info->member_srl)
{
@ -671,7 +673,7 @@ class documentController extends document
}
// For the document written by logged-in user however no nick_name exists
if($source_obj->get('member_srl')&& !$obj->nick_name)
if($source_obj->get('member_srl')&& !$obj->nick_name && !$obj->manual_member_info)
{
$obj->member_srl = $source_obj->get('member_srl');
$obj->user_name = $source_obj->get('user_name');