开启邀请码注册:
进入站点后台->全局->注册与访问,找到允许新用户注册,勾选开放邀请注册方式。
代码分析:
找到source\class\class_member.php文件,在336行附近
- $invitestatus = false;
- if($this->setting['regstatus'] == 2) {
- if($this->setting['inviteconfig']['inviteareawhite']) {
- $location = $whitearea = '';
- $location = trim(convertip($_G['clientip'], "./"));
- if($location) {
- $whitearea = preg_quote(trim($this->setting['inviteconfig']['inviteareawhite']), '/');
- $whitearea = str_replace(array("\\*"), array('.*'), $whitearea);
- $whitearea = '.*'.$whitearea.'.*';
- $whitearea = '/^('.str_replace(array("\r\n", ' '), array('.*|.*', ''), $whitearea).')$/i';
- if(@preg_match($whitearea, $location)) {
- $invitestatus = true;
- }
- }
- }
- if($this->setting['inviteconfig']['inviteipwhite']) {
- foreach(explode("\n", $this->setting['inviteconfig']['inviteipwhite']) as $ctrlip) {
- if(preg_match("/^(".preg_quote(($ctrlip = trim($ctrlip)), '/').")/", $_G['clientip'])) {
- $invitestatus = true;
- break;
- }
- }
- }
- }
复制代码 判断当前注册用户是否在不受邀请码限制的地区列表和不受邀请码限制的 IP 列表中,若在则$invitestatus为TRUE,注册无需邀请码。
在376行附近
- if(!$invitestatus) {
- $invite = getinvite();
- }
复制代码 获取邀请码相关信息,getinvite函数在source\function\function_member.php文件中定义,返回为数组,具体如下。
- array(
- 'id' => '当前的邀请码id',
- 'uid' => '邀请人的uid',
- 'appid' => '邀请的应用id',
- 'username' => '邀请人的用户名',
- );
复制代码
在433行附近
- if($this->setting['regstatus'] == 2 && empty($invite) && !$invitestatus) {
- showmessage('not_open_registration_invite');
- }
复制代码 判断在开启邀请注册且不在不受邀请注册的地区和IP列表的情况下是否存在邀请码。
在627行附近
- if($invite && $this->setting['inviteconfig']['invitegroupid']) {
- $groupinfo['groupid'] = $this->setting['inviteconfig']['invitegroupid'];
- }
复制代码 存在邀请码且设置了邀请注册用户初始用户组的情况下,将用户注册后的用户组设为邀请注册用户初始用户组。
在722行附近
- if($invite['id']) {
- $result = DB::result_first("SELECT COUNT(*) FROM ".DB::table('common_invite')." WHERE uid='$invite[uid]' AND fuid='$uid'");
- if(!$result) {
- DB::update("common_invite", array('fuid'=>$uid, 'fusername'=>$_G['username'], 'regdateline' => $_G['timestamp'], 'status' => 2), array('id'=>$invite['id']));
- updatestat('invite');
- } else {
- $invite = array();
- }
- }
复制代码- $result = DB::result_first("SELECT COUNT(*) FROM ".DB::table('common_invite')." WHERE uid='$invite[uid]' AND fuid='$uid'");
复制代码 判断此用户是否已经被邀请人邀请注册了。
若没有:
- DB::update("common_invite", array('fuid'=>$uid, 'fusername'=>$_G['username'], 'regdateline' => $_G['timestamp'], 'status' => 2), array('id'=>$invite['id']));
- updatestat('invite');
复制代码 往common_invite表里更新相应的值,同时更新邀请注册的统计。
在731行附近
- if($invite['uid']) {
- if($this->setting['inviteconfig']['inviteaddcredit']) {
- updatemembercount($uid, array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['inviteaddcredit']));
- }
- if($this->setting['inviteconfig']['invitedaddcredit']) {
- updatemembercount($invite['uid'], array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['invitedaddcredit']));
- }
- require_once libfile('function/friend');
- friend_make($invite['uid'], $invite['username'], false);
- notification_add($invite['uid'], 'friend', 'invite_friend', array('actor' => '<a href="home.php?mod=space&uid='.$invite['uid'].'" target="_blank">'.$invite['username'].'</a>'), 1);
- space_merge($invite, 'field_home');
- if(!empty($invite['privacy']['feed']['invite'])) {
- require_once libfile('function/feed');
- $tite_data = array('username' => '<a href="home.php?mod=space&uid='.$_G['uid'].'">'.$_G['username'].'</a>');
- feed_add('friend', 'feed_invite', $tite_data, '', array(), '', array(), array(), '', '', '', 0, 0, '', $invite['uid'], $invite['username']);
- }
- if($invite['appid']) {
- updatestat('appinvite');
- }
- }
复制代码 若存在邀请人:
- if($this->setting['inviteconfig']['inviteaddcredit']) {
- updatemembercount($uid, array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['inviteaddcredit']));
- }
复制代码 若后台设置了被邀请人奖励积分数量,则更新被邀请人$uid的积分。
其中$this->setting['inviteconfig']['inviterewardcredit']为后台设置的邀请新注册会员奖励所用扩展积分。
- if($this->setting['inviteconfig']['invitedaddcredit']) {
- updatemembercount($invite['uid'], array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['invitedaddcredit']));
- }
复制代码 若后台设置了邀请人奖励积分数量,则更新邀请人$invite['uid']的积分。
其中$this->setting['inviteconfig']['inviterewardcredit']为后台设置的邀请新注册会员奖励所用扩展积分。
- require_once libfile('function/friend');
- friend_make($invite['uid'], $invite['username'], false);
- notification_add($invite['uid'], 'friend', 'invite_friend', array('actor' => '<a href="home.php?mod=space&uid='.$invite['uid'].'" target="_blank">'.$invite['username'].'</a>'), 1);
复制代码 将邀请人和被邀请人设置为好友关系,同时向邀请人发送邀请成功的提醒。
- space_merge($invite, 'field_home');
- if(!empty($invite['privacy']['feed']['invite'])) {
- require_once libfile('function/feed');
- $tite_data = array('username' => '<a href="home.php?mod=space&uid='.$_G['uid'].'">'.$_G['username'].'</a>');
- feed_add('friend', 'feed_invite', $tite_data, '', array(), '', array(), array(), '', '', '', 0, 0, '', $invite['uid'], $invite['username']);
- }
复制代码 发送邀请的动态。
- if($invite['appid']) {
- updatestat('appinvite');
- }
复制代码 若为应用的邀请,则更新应用邀请的统计。
|