질문/조언질답게시판

회원 탈퇴 시 트리거

Extra Form
PHP PHP 7.3
CMS Rhymix

회원가입 시 이메일을 보내는 애드온을 쓰고 있는데

 

getController('module')->addTriggerFunction('member.insertMember', 'after', function($obj) use($addon_info)
{

 

애드온 파일을 보니까 이렇게 시작되더라구요

 

그래서 이메일을 회원이 탈퇴할 때에도 보내도록 하고 싶어서 아래와 같이 트리거를 변경해주었습니다.

 

getController('module')->addTriggerFunction('member.deleteMember', 'before', function($obj) use($addon_info)
{

 

그런데 회원목록에서 회원을 삭제(회원이 탈퇴)할 때 메일이 안보내지더라구요...

 

혹시 이렇게 쓸 수 없는건가요..?

  • profile

    무슨 메일주소로 보내는것인진 잘모르겟는데
    funtion($obj) 에 들어가는게

    $trigger_obj = new stdClass();
    $trigger_obj->member_srl = $member_srl;

    이렇게 회원번호 정보밖에 없습니다.

    트리거 사용하실때 사용하는 파라미터들이 어떤내용으로 들어오는지 확인하시고 해당 메일을 어떻게 구해올지에 대해서 정확하게 판단하시는게 좋습니다.

  • profile profile
    <?php
    if ( !defined('RX_VERSION') ) return;
    if ( $called_position !== 'before_module_init' ) return;
    if ( !$addon_info->to_admin && !$addon_info->to_member ) return;
    
    
    getController('module')->addTriggerFunction('member.insertMember', 'after', function($obj) use($addon_info)
    {
    // 매크로 변수 생성
    $site_title = Context::getSiteTitle();
    
    $extra_vars = unserialize($obj->extra_vars);
    
    $macros = array(
    '{SITE_NAME}' => htmlspecialchars($site_title, ENT_QUOTES, 'UTF-8', false),
    '{USER_ID}' => htmlspecialchars($obj->user_id, ENT_QUOTES, 'UTF-8', false),
    '{USER_NAME}' => htmlspecialchars($obj->user_name, ENT_QUOTES, 'UTF-8', false),
    '{NICK_NAME}' => htmlspecialchars($obj->nick_name, ENT_QUOTES, 'UTF-8', false),
    '{EMAIL}' => htmlspecialchars($obj->email_address, ENT_QUOTES, 'UTF-8', false),
    '{REGDATE}' => date('Y년 n월 j일'),
    '{PASSWORD}' => htmlspecialchars($obj->password, ENT_QUOTES, 'UTF-8', false),
    '{PHONENUM}' => htmlspecialchars($extra_vars->phone_num, ENT_QUOTES, 'UTF-8', false),
    '{GRADE}' => htmlspecialchars($extra_vars->group, ENT_QUOTES, 'UTF-8', false)
    );
    
    // 관리자 알림
    if ( $addon_info->to_admin && strpos($extra_vars->group, "그룹이름") !== false || strpos($extra_vars->group, "그룹이름") !== false  )
    {
    // 메일 제목
    $ttl_to_admin = ( $addon_info->ttl_to_admin ) ? htmlspecialchars_decode(str_replace(array_keys($macros), array_values($macros), $addon_info->ttl_to_admin)) : '신규 회원 가입 알림';
    // 메일 내용
    if ( $addon_info->msg_to_admin )
    {
    $msg_to_admin = str_replace(array_keys($macros), array_values($macros), $addon_info->msg_to_admin);
    }
    else
    {
    $msg_to_admin = '<p style="margin-bottom: 2em">새로운 회원이 가입했습니다.</p>';
    $msg_to_admin .= '<ul style="list-style-type: none; margin: 3em 0; padding: 0;">';
    $msg_to_admin .= '<li><strong>아이디 : </strong>'. $obj->user_id .'</li>';
    $msg_to_admin .= '<li><strong>닉네임 : </strong>'. $obj->nick_name .'</li>';
    $msg_to_admin .= '<li><strong>이메일주소 : </strong>'. $obj->email_address .'</li>';
    $msg_to_admin .= '</ul>';
    }
    
    // 발신 사항 처리
    $oMail = new Rhymix\Framework\Mail();
    $oMail->setTitle($ttl_to_admin);
    $oMail->setContent($msg_to_admin);
    $default_domain = getModel('module')->getDefaultDomainInfo()->domain;
    $oMail->setFrom('[email protected]***.com', '***닷컴 가입안내');
    
    // 수신 사항 처리
    if ( $addon_info->to_admin === 'W' )
    {
    $member_config = getModel('member')->getMemberConfig();
    $oMail->addTo('***@sugoin.com', '***닷컴 가입안내');
    $oMail->send();
    }
    else if ( $addon_info->to_admin === 'A' )
    {
    $admins = executeQueryArray('member.getAdmins')->data;
    foreach( $admins as $val )
    {
    $admin_info = getModel('member')->getMemberInfoByMemberSrl($val->member_srl);
    $oMail->addTo('[email protected]***.com', '***닷컴 가입안내');
    $oMail->send();
    }
    }
    }
    return $obj;
    });
    ?>

     

     

    위 코드가 회원가입 시 관리자에게 이메일을 보내는 소스인데요

     

    저는 여기서 아래 소스가 회원가입 시 이메일을 발송하도록 하는 구문으로 생각하고 있습니다.

    getController('module')->addTriggerFunction('member.insertMember', 'after', function($obj) use($addon_info)
    {

     

     

    따라서 저는 이 부분을 변형시켜서 member.insertMember를 member.deleteMember로, after을 before로 바꾸면

    회원탈퇴 시에 메일이 보내질 것으로 생각했는데, 안보내지더라구요.

     

    흠... 어떻게 해야 회원탈퇴 시 메일을 보낼 수 있을까요...?

     

    저의 무지로 인해서

    항상 도움만 받아 죄송합니다 ㅠㅠ

  • profile profile
    아 혹시 member.insertMember에서 받을 수 있는 값과 member.deleteMember 에서 받아올 수 있는 값이 다른가요?
    값이 다르더라도 메일 자체는 전송이 될 것 같다는 생각이 드는데 말이죠...

    회원탈퇴 시 이메일을 보내도록 하려면
    어떻게 해야 할까요...?

    삭제되기 직전에 탈퇴할 회원의 아이디 값과 닉네임, 이메일주소를 받아와서
    관리자 이메일로 전송하고 싶습니다.

    애드온단에서는 힘들고 모듈단에서 처리해야 하는 문제일까요?
  • profile profile
    메일전송 코드를 어떻게 하신지 모르겟는데

    $obj에는 담기는 내용이 완전 다릅니다.

    삭제시에는 회원번호로만 조회가능합니다.

    시점이 after냐 before이냐에 따라도 달라지고요.
  • profile profile
    위에 회원가입시 회원정보 가져오는 부분 확인해봣는데요

    이메일 주소가져오는 방식으로 사용하시는 $obj에는 탈퇴시에는 member_srl 정보만 담겨져서 나옵니다.

    $obj에 무슨값이 담겨져있는지 확인해보실려면 debugPrint, var_dump, print_r 등등의 함수들로 확인해보시는걸 추천합니다.
  • profile profile
    아 그렇군요...
    답변 정말로 감사드립니다 :)

    구글링 해보면서 공부해봐야겠네요 ㅎㅎ
  • profile profile
    if ( $called_position !== 'before_module_init' ) return;
    이 부분있잖아요.

    으흠.. 애드온 호출시점때문에 작동안하는걸수도 있으니
    다양하게 테스트해보시길 바랍니다.

    https://github.com/rhymix/rhymix/pull/186

    메뉴얼은 이부분 참고하시고 메일이 발송되지 않는다는 부분은 단순히 insertMember부분을 delete로만 수정하셧다는 정보로는 확실한 답변을 드리긴 어렵겠네요.
  • profile
    member.deleteMember 트리거의 $obj 에는 회원 SRL 만 담기므로
    이메일 주소를 얻어오려면 해당 회원의 이메일 주소를 가져오는 절차가 포함되어야 하겠지요.

    $oMemberModel = getModel('member');
    $member_info = $oMemberModel->getMemberInfoByMemberSrl($obj->member_srl);
    $email_address = $member_info->email_address;
  • profile profile

    코드 보니까 관리자에게 알려주는 메일인것 같아요 ㅎㅎ 그래서 회원정보만 이 방법대로 가져와서 사용하도록 하는게 맞을 것 같아요 ㅎㅎ

  • profile profile
    네네 회원가입시 가입정보가 승인 메일함으로 전송되어서

    정보에 오류가 없다면 자동으로 마이크로소프트 오피스 365 계정 생성해주고(이메일 발급) 라이센스 할당해주는 프로세스로 사용중입니다. (+ 환영 문자 발송)

    회원 탈퇴 시 다시 메일을 날려서 오피스 365 계정을 삭제해주려고 하는데 알려주신 내용을 기반으로 좀 더 테스트 해봐야겠네요 ㅎㅎ
  • profile profile
    같은 이메일 주소로 이메일발송이 안된다는건 이메일이 실패한건데 왜 실패한건지부터 봐야하지 않을까요?

    저 코드들은 사실 유저의 이메일정보를 통해서 유저에게 보내는게 아닌데 특정 상황에서 메일이 오고, 특정상황에서 메일이 안온다는건 메일이 안오는쪽에서 뭔가 문제가 있을거라는 예측이 가거든요 ㅎㅎ

    자세한건 제가 님 서버를 다 알고 잇는것도 아니고 그래서 정확하게 답변은 못드리지만 제 예상에는 그렇네요.