회원가입시 확장변수값으로 회원그룹 자동 분류
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.0 |
좀 전에 질문 올렸다가 살짝 지웠는데요. (갑자기 성공한 줄 알고요ㅋㅋㅋ)
제목 그대로 회원가입 받을 때,
가입자가 선택한 확장변수(예. univ)의 변수값(예. NYU)과 일치하는
회원그룹으로 자동 분류(예. 'NYU' 그룹)하는 애드온입니다.
오토씽님의 회원가입시 그룹 선택 애드온이 있긴 합니다만, 제 사이트에선 뭔가 작동을 안 하는 것 같아 따로 좀 만들어봤어요 :)
<?php
if ( !defined('__XE__') ) exit();
if (
$called_position !== 'after_module_proc'
|| ( Context::get('act') !== 'procMemberInsert' && Context::get('act') !== 'procSocialxeInputAddInfo' )
)
return;
$gid = $addon_info->extra_key;
if ( !$gid ) return;
$obj = Context::getRequestVars();
$oMemberModel = getModel('member');
$groups = $oMemberModel->getGroups();
$group_srl_list = array();
foreach ( $groups as $group )
{
if ( $group->is_admin !== 'Y' && $group->title === $obj->$gid )
{
$group_srl_list[] = $group->group_srl;
}
}
if ( empty($group_srl_list) ) return;
$member_srl = $oMemberModel->getMemberSrlByNickName($obj->nick_name);
debugPrint($member_srl);
$args = new stdClass;
$args->member_srl = $member_srl;
$oDB = &DB::getInstance();
$oDB->begin();
$output = executeQuery('member.deleteMemberGroupMember', $args);
if( !$output->toBool() )
{
$oDB->rollback();
return $output;
}
$oMemberController = getController('member');
foreach ( $group_srl_list as $group_srl )
{
$oMemberController->addMemberToGroup($member_srl, $group_srl);
if( !$output->toBool() )
{
$oDB->rollback();
return $output;
}
}
$oDB->commit();
$oMemberController->_clearMemberCache($member_srl, 0);
?>
if ( !defined('__XE__') ) exit();
if (
$called_position !== 'after_module_proc'
|| ( Context::get('act') !== 'procMemberInsert' && Context::get('act') !== 'procSocialxeInputAddInfo' )
)
return;
$gid = $addon_info->extra_key;
if ( !$gid ) return;
$obj = Context::getRequestVars();
$oMemberModel = getModel('member');
$groups = $oMemberModel->getGroups();
$group_srl_list = array();
foreach ( $groups as $group )
{
if ( $group->is_admin !== 'Y' && $group->title === $obj->$gid )
{
$group_srl_list[] = $group->group_srl;
}
}
if ( empty($group_srl_list) ) return;
$member_srl = $oMemberModel->getMemberSrlByNickName($obj->nick_name);
debugPrint($member_srl);
$args = new stdClass;
$args->member_srl = $member_srl;
$oDB = &DB::getInstance();
$oDB->begin();
$output = executeQuery('member.deleteMemberGroupMember', $args);
if( !$output->toBool() )
{
$oDB->rollback();
return $output;
}
$oMemberController = getController('member');
foreach ( $group_srl_list as $group_srl )
{
$oMemberController->addMemberToGroup($member_srl, $group_srl);
if( !$output->toBool() )
{
$oDB->rollback();
return $output;
}
}
$oDB->commit();
$oMemberController->_clearMemberCache($member_srl, 0);
?>
그런데 이게 일반회원 가입 때는 잘 되는데,
소셜XE로 가입하면 member_srl을 받아오질 못하더라구요.
위에 하이라이트된 29행 디버깅 결과, 일반가입 때는 값이 찍히고 소셜XE 때는 값이 비어 있어요.
어째서 이런 차이가 생기는 걸까요 흐음..

윤삼
Lv. 19
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
댓글 8
제가 정신이 팔려서;;;
에디터의 확장 컴포넌트에 있는 거예요.
Context::get('act') !== 'procMemberInsert' 가 아니거든요
procSocialxeInputAddInfo 도 아니고..
그러니 애드온에서 처음부터 제외가 되어버릴거예요
제 예상으로는 10번줄까지도 못 갈거 같은데..
일반가입 때 $obj에 member_srl이 없어서 getMemberSrlByNickName을 쓴 거였는데,
소셜 로그인에서는 getMemberSrlByNickName가 안 먹는 것 같더라구요ㅜ
그러면 혹시 procSocialxeCallback으로 잡아야 할까요?
음, 위의 방법이 왜 안 되는지는 모르겠고, 대신 getNextSequence(); 로 $member_srl 을 잡을 수도 있었을 것 같긴 한데,
어쨌든 라이믹스에 있는 애드온에서의 트리거 호출 기능을 활용해서 문제를 해결했습니다.
ㅎㅎ코드가 훨씬 더 간단해졌네요.
람보님의 애드온을 참조했습니다. https://xetown.com/tips/795194
if ( !defined('RX_BASEDIR') ) return;
if ( $called_position !== 'before_module_proc' ) return;
if ( !$addon_info->extra_key ) return;
$oModuleController = getController('module');
$oModuleController->addTriggerFunction('member.insertMember', 'before', function($args)
{
$oAddonModel = getAdminModel('addon');
$addon_info = $oAddonModel->getAddonInfoXml('ap_group_select');
$gid = $addon_info->extra_vars[0]->value;
$obj = Context::getRequestVars();
$oMemberModel = getModel('member');
$groups = $oMemberModel->getGroups();
$group_srl_list = array();
foreach ( $groups as $group )
{
if ( $group->is_admin !== 'Y' && $group->title === $obj->$gid )
{
$group_srl_list[] = $group->group_srl;
}
}
if ( empty($group_srl_list) ) return;
$args->group_srl_list = $group_srl_list;
return $args;
});
?>