Jin Dev
Jin Dev
Jin Dev
전체 방문자
오늘
어제
  • 분류 전체보기 (7)
    • 공부 (4)
      • Python (1)
      • C++ (1)
      • XE (1)
      • Git (1)
    • 팁 (3)

블로그 메뉴

  • 홈
  • About me

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Jin Dev

Jin Dev

공부/XE

회원가입 시 관리자에게 메일로 알리기

2019. 2. 11. 00:01
728x90
반응형

시작에 앞서, 본 문서는 XE 1.11.0 버전 기준이다.

회원가입 시 멤버 추가를 처리하는 함수는 xe/modules/member/member.controller.php에 function insertMember(&$args, $password_is_hashed = false) 함수 내에 있다. 이 함수의 마지막 부분에 mail을 보내는 코드를 넣으면 된다.

xe/modules/member/member.controller.php의 2100번째 줄에 insertMember함수가 정의되어 있다.

    function insertMember(&$args, $password_is_hashed = false)
    {
        // Call a trigger (before)
        $output = ModuleHandler::triggerCall('member.insertMember', 'before', $args);
        if(!$output->toBool()) return $output;
        // Terms and Conditions portion of the information set up by members reaffirmed
        $oModuleModel = getModel('module');
        $config = $oModuleModel->getModuleConfig('member');
        $logged_info = Context::get('logged_info');
        // If the date of the temporary restrictions limit further information on the date of
        if($config->limit_day) $args->limit_date = date("YmdHis", $_SERVER['REQUEST_TIME']+$config->limit_day*60*60*24);
        $args->member_srl = getNextSequence();
        $args->list_order = -1 * $args->member_srl;
        // Execute insert or update depending on the value of member_srl
        if(!$args->user_id) $args->user_id = 't'.$args->member_srl;
        // Enter the user's identity changed to lowercase
        else $args->user_id = strtolower($args->user_id);
        if(!$args->user_name) $args->user_name = $args->member_srl;
        if(!$args->nick_name) $args->nick_name = $args->member_srl;
        // Control of essential parameters
        if($args->allow_mailing!='Y') $args->allow_mailing = 'N';
        if($args->denied!='Y') $args->denied = 'N';
        if(!$args->allow_message || ($args->allow_message && !in_array($args->allow_message, array('Y','N','F')))) $args->allow_message = 'Y';
        if($logged_info->is_admin == 'Y')
        {
            if($args->is_admin!='Y') $args->is_admin = 'N';
        }
        else
        {
            unset($args->is_admin);
        }
        list($args->email_id, $args->email_host) = explode('@', $args->email_address);
        // Sanitize user ID, username, nickname, homepage, blog
        $args->user_id = htmlspecialchars($args->user_id, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
        $args->user_name = htmlspecialchars($args->user_name, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
        $args->nick_name = htmlspecialchars($args->nick_name, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
        $args->homepage = htmlspecialchars($args->homepage, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
        $args->blog = htmlspecialchars($args->blog, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
        if($args->homepage && !preg_match("/^[a-z]+:\/\//i",$args->homepage)) $args->homepage = 'http://'.$args->homepage;
        if($args->blog && !preg_match("/^[a-z]+:\/\//i",$args->blog)) $args->blog = 'http://'.$args->blog;
        // Create a model object
        $oMemberModel = getModel('member');
        // Check password strength
        if($args->password && !$password_is_hashed)
        {
            if(!$oMemberModel->checkPasswordStrength($args->password, $config->password_strength))
            {
                $message = Context::getLang('about_password_strength');
                return new BaseObject(-1, $message[$config->password_strength]);
            }
            $args->password = $oMemberModel->hashPassword($args->password);
        }
        elseif(!$args->password)
        {
            unset($args->password);
        }
        if($args->find_account_answer && !$password_is_hashed)
        {
            $args->find_account_answer = $oMemberModel->hashPassword($args->find_account_answer);
        }
        elseif(!$args->find_account_answer)
        {
            unset($args->find_account_answer);
        }
        // Check if ID is prohibited
        if($oMemberModel->isDeniedID($args->user_id))
        {
            return new BaseObject(-1,'denied_user_id');
        }
        // Check if ID is duplicate
        $member_srl = $oMemberModel->getMemberSrlByUserID($args->user_id);
        if($member_srl)
        {
            return new BaseObject(-1,'msg_exists_user_id');
        }
        // Check if nickname is prohibited
        if($oMemberModel->isDeniedNickName($args->nick_name))
        {
            return new BaseObject(-1,'denied_nick_name');
        }
        // Check if nickname is duplicate
        $member_srl = $oMemberModel->getMemberSrlByNickName($args->nick_name);
        if($member_srl)
        {
            return new BaseObject(-1,'msg_exists_nick_name');
        }
        // Check if email address is duplicate
        $member_srl = $oMemberModel->getMemberSrlByEmailAddress($args->email_address);
        if($member_srl)
        {
            return new BaseObject(-1,'msg_exists_email_address');
        }
        // Insert data into the DB
        $args->list_order = -1 * $args->member_srl;
        if(!$args->user_id) $args->user_id = 't'.$args->member_srl;
        if(!$args->user_name) $args->user_name = $args->member_srl;
        $oDB = &DB::getInstance();
        $oDB->begin();
        $output = executeQuery('member.insertMember', $args);
        if(!$output->toBool())
        {
            $oDB->rollback();
            return $output;
        }
        if(is_array($args->group_srl_list)) $group_srl_list = $args->group_srl_list;
        else $group_srl_list = explode('|@|', $args->group_srl_list);
        // If no value is entered the default group, the value of group registration
        if(!$args->group_srl_list)
        {
            $columnList = array('site_srl', 'group_srl');
            $default_group = $oMemberModel->getDefaultGroup(0, $columnList);
            if($default_group)
            {
                // Add to the default group
                $output = $this->addMemberToGroup($args->member_srl,$default_group->group_srl);
                if(!$output->toBool())
                {
                    $oDB->rollback();
                    return $output;
                }
            }
            // If the value is the value of the group entered the group registration
        }
        else
        {
            for($i=0;$i<count($group_srl_list);$i++)
            {
                $output = $this->addMemberToGroup($args->member_srl,$group_srl_list[$i]);
                if(!$output->toBool())
                {
                    $oDB->rollback();
                    return $output;
                }
            }
        }
        $member_config = $oModuleModel->getModuleConfig('member');
        // When using email authentication mode (when you subscribed members denied a) certified mail sent
        if($args->denied == 'Y')
        {
            // Insert data into the authentication DB
            $oPassword = new Password();
            $auth_args = new stdClass();
            $auth_args->user_id = $args->user_id;
            $auth_args->member_srl = $args->member_srl;
            $auth_args->new_password = $args->password;
            $auth_args->auth_key = $oPassword->createSecureSalt(40);
            $auth_args->is_register = 'Y';
            $output = executeQuery('member.insertAuthMail', $auth_args);
            if(!$output->toBool())
            {
                $oDB->rollback();
                return $output;
            }
            $this->_sendAuthMail($auth_args, $args);
        }
        // Call a trigger (after)
        if($output->toBool())
        {
            $trigger_output = ModuleHandler::triggerCall('member.insertMember', 'after', $args);
            if(!$trigger_output->toBool())
            {
                $oDB->rollback();
                return $trigger_output;
            }
        }
        $oDB->commit(true);
        $output->add('member_srl', $args->member_srl);
        return $output;
    }

이 함수의 마지막 부분(2292번째 줄) return $output; 바로 위에 다음 코드를 삽입한다.

        // Send a mail
        $oMail = new Mail();
        $oMail->setTitle("메일 제목");
        $oMail->setContent("메일 내용");
        $oMail->setSender( $member_config->webmaster_name?$member_config->webmaster_name:'webmaster', $member_config->webmaster_email );
        $oMail->setReceiptor( $member_config->webmaster_name?$member_config->webmaster_name:'webmaster', $member_config->webmaster_email );
        $oMail->send();

"메일 제목"과 "메일 내용" 부분은 알아서 수정한다.

만약 관리자뿐만 아니라 다른 여러 사람들에게 알리려면 숨은 참조 기능을 이용한다. $oMail->setBCC('aaa@aaa.com,bbb@bbb.com');을 추가로 넣어주면 된다. 각 이메일은 ,로 구분하여 적는다.

728x90
반응형
    Jin Dev
    Jin Dev

    티스토리툴바