Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于注册的邀请码分析

[复制链接]
dongdong0925 发表于 2011-8-28 20:58:43 | 显示全部楼层 |阅读模式
开启邀请码注册:
进入站点后台->全局->注册与访问,找到允许新用户注册,勾选开放邀请注册方式。

代码分析:
找到source\class\class_member.php文件,在336行附近
  1. $invitestatus = false;
  2.                 if($this->setting['regstatus'] == 2) {
  3.                         if($this->setting['inviteconfig']['inviteareawhite']) {
  4.                                 $location = $whitearea = '';
  5.                                 $location = trim(convertip($_G['clientip'], "./"));
  6.                                 if($location) {
  7.                                         $whitearea = preg_quote(trim($this->setting['inviteconfig']['inviteareawhite']), '/');
  8.                                         $whitearea = str_replace(array("\\*"), array('.*'), $whitearea);
  9.                                         $whitearea = '.*'.$whitearea.'.*';
  10.                                         $whitearea = '/^('.str_replace(array("\r\n", ' '), array('.*|.*', ''), $whitearea).')$/i';
  11.                                         if(@preg_match($whitearea, $location)) {
  12.                                                 $invitestatus = true;
  13.                                         }
  14.                                 }
  15.                         }

  16.                         if($this->setting['inviteconfig']['inviteipwhite']) {
  17.                                 foreach(explode("\n", $this->setting['inviteconfig']['inviteipwhite']) as $ctrlip) {
  18.                                         if(preg_match("/^(".preg_quote(($ctrlip = trim($ctrlip)), '/').")/", $_G['clientip'])) {
  19.                                                 $invitestatus = true;
  20.                                                 break;
  21.                                         }
  22.                                 }
  23.                         }
  24.                 }
复制代码
判断当前注册用户是否在不受邀请码限制的地区列表和不受邀请码限制的 IP 列表中,若在则$invitestatus为TRUE,注册无需邀请码。

在376行附近
  1. if(!$invitestatus) {
  2.                         $invite = getinvite();
  3.                 }
复制代码
获取邀请码相关信息,getinvite函数在source\function\function_member.php文件中定义,返回为数组,具体如下。
  1. array(
  2. 'id' => '当前的邀请码id',
  3. 'uid' => '邀请人的uid',
  4. 'appid' => '邀请的应用id',
  5. 'username' => '邀请人的用户名',
  6. );
复制代码


在433行附近
  1. if($this->setting['regstatus'] == 2 && empty($invite) && !$invitestatus) {
  2.                                 showmessage('not_open_registration_invite');
  3.                         }
复制代码
判断在开启邀请注册且不在不受邀请注册的地区和IP列表的情况下是否存在邀请码。

在627行附近
  1. if($invite && $this->setting['inviteconfig']['invitegroupid']) {
  2.                                 $groupinfo['groupid'] = $this->setting['inviteconfig']['invitegroupid'];
  3.                         }
复制代码
存在邀请码且设置了邀请注册用户初始用户组的情况下,将用户注册后的用户组设为邀请注册用户初始用户组。

在722行附近
  1. if($invite['id']) {
  2.                                 $result = DB::result_first("SELECT COUNT(*) FROM ".DB::table('common_invite')." WHERE uid='$invite[uid]' AND fuid='$uid'");
  3.                                 if(!$result) {
  4.                                         DB::update("common_invite", array('fuid'=>$uid, 'fusername'=>$_G['username'], 'regdateline' => $_G['timestamp'], 'status' => 2), array('id'=>$invite['id']));
  5.                                         updatestat('invite');
  6.                                 } else {
  7.                                         $invite = array();
  8.                                 }
  9.                         }
复制代码
  1. $result = DB::result_first("SELECT COUNT(*) FROM ".DB::table('common_invite')." WHERE uid='$invite[uid]' AND fuid='$uid'");
复制代码
判断此用户是否已经被邀请人邀请注册了。
若没有:
  1. DB::update("common_invite", array('fuid'=>$uid, 'fusername'=>$_G['username'], 'regdateline' => $_G['timestamp'], 'status' => 2), array('id'=>$invite['id']));
  2.                                         updatestat('invite');
复制代码
往common_invite表里更新相应的值,同时更新邀请注册的统计。

在731行附近
  1. if($invite['uid']) {
  2.                                 if($this->setting['inviteconfig']['inviteaddcredit']) {
  3.                                         updatemembercount($uid, array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['inviteaddcredit']));
  4.                                 }
  5.                                 if($this->setting['inviteconfig']['invitedaddcredit']) {
  6.                                         updatemembercount($invite['uid'], array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['invitedaddcredit']));
  7.                                 }
  8.                                 require_once libfile('function/friend');
  9.                                 friend_make($invite['uid'], $invite['username'], false);
  10.                                 notification_add($invite['uid'], 'friend', 'invite_friend', array('actor' => '<a href="home.php?mod=space&uid='.$invite['uid'].'" target="_blank">'.$invite['username'].'</a>'), 1);

  11.                                 space_merge($invite, 'field_home');
  12.                                 if(!empty($invite['privacy']['feed']['invite'])) {
  13.                                         require_once libfile('function/feed');
  14.                                         $tite_data = array('username' => '<a href="home.php?mod=space&uid='.$_G['uid'].'">'.$_G['username'].'</a>');
  15.                                         feed_add('friend', 'feed_invite', $tite_data, '', array(), '', array(), array(), '', '', '', 0, 0, '', $invite['uid'], $invite['username']);
  16.                                 }
  17.                                 if($invite['appid']) {
  18.                                         updatestat('appinvite');
  19.                                 }
  20.                         }
复制代码
若存在邀请人:
  1. if($this->setting['inviteconfig']['inviteaddcredit']) {
  2.                                         updatemembercount($uid, array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['inviteaddcredit']));
  3.                                 }
复制代码
若后台设置了被邀请人奖励积分数量,则更新被邀请人$uid的积分。
其中$this->setting['inviteconfig']['inviterewardcredit']为后台设置的邀请新注册会员奖励所用扩展积分。

  1. if($this->setting['inviteconfig']['invitedaddcredit']) {
  2.                                         updatemembercount($invite['uid'], array($this->setting['inviteconfig']['inviterewardcredit'] => $this->setting['inviteconfig']['invitedaddcredit']));
  3.                                 }
复制代码
若后台设置了邀请人奖励积分数量,则更新邀请人$invite['uid']的积分。
其中$this->setting['inviteconfig']['inviterewardcredit']为后台设置的邀请新注册会员奖励所用扩展积分。

  1. require_once libfile('function/friend');
  2.                                 friend_make($invite['uid'], $invite['username'], false);
  3.                                 notification_add($invite['uid'], 'friend', 'invite_friend', array('actor' => '<a href="home.php?mod=space&uid='.$invite['uid'].'" target="_blank">'.$invite['username'].'</a>'), 1);
复制代码
将邀请人和被邀请人设置为好友关系,同时向邀请人发送邀请成功的提醒。

  1. space_merge($invite, 'field_home');
  2.                                 if(!empty($invite['privacy']['feed']['invite'])) {
  3.                                         require_once libfile('function/feed');
  4.                                         $tite_data = array('username' => '<a href="home.php?mod=space&uid='.$_G['uid'].'">'.$_G['username'].'</a>');
  5.                                         feed_add('friend', 'feed_invite', $tite_data, '', array(), '', array(), array(), '', '', '', 0, 0, '', $invite['uid'], $invite['username']);
  6.                                 }
复制代码
发送邀请的动态。

  1. if($invite['appid']) {
  2.                                         updatestat('appinvite');
  3.                                 }
复制代码
若为应用的邀请,则更新应用邀请的统计。


a474946460 发表于 2011-9-6 13:47:37 | 显示全部楼层
(::13::)
回复

使用道具 举报

非一般感觉 发表于 2011-9-7 13:53:31 | 显示全部楼层
  学习了
回复

使用道具 举报

邹意— 发表于 2011-9-27 14:33:01 | 显示全部楼层
看不懂  汗
回复

使用道具 举报

fanzheng0213 发表于 2011-10-26 22:36:48 | 显示全部楼层
应该是php吧,我要好好学学。
回复

使用道具 举报

主动与被动 发表于 2011-11-14 11:27:05 | 显示全部楼层
如何把创始人的账号挑出来不用邀请注册啊?
回复

使用道具 举报

unpass 发表于 2011-12-17 01:49:03 | 显示全部楼层
应该是php吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-4-20 16:36 , Processed in 0.509152 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表