invite) { $this->table = Dever::config('base')->invite; } } # 只记录6级关系 private $total = 100; # 通用的邀请方法: # uid 当前用户的上级,需要通过code邀请码来得到 # to_uid 被邀请人,当前登录用户,注册后得到 public function set($uid, $to_uid) { $this->setParent($uid, $to_uid); $this->add($uid, $to_uid, 1); return true; } public function setParent($uid, $to_uid, $level = 1) { $parent = $this->getParent($uid); if ($parent) { $level = $level + 1; if ($level > $this->total) { return; } $this->add($parent['uid'], $to_uid, $level); $this->setParent($parent['uid'], $to_uid, $level); } } # 更换上级 效率较高 public function replaceParent($uid, $old_parent, $new_parent, $call = true) { $info = Dever::db($this->table)->one(array('to_uid' => $uid, 'uid' => $old_parent)); if ($info) { $state = Dever::db($this->table)->update(array('where_id' => $info['id'], 'uid' => $new_parent)); if ($state && $call) { $child = $this->getChild($uid, false, false); if ($child) { foreach ($child as $k => $v) { $this->replaceParent($v['to_uid'], $old_parent, $new_parent, false); } } } } return true; } # 重置上级 效率较低 public function resetParent($uid, $parent) { Dever::db($this->table)->delete(array('to_uid' => $uid)); $this->set($parent, $uid); $child = $this->getChild($uid, 1, false); if ($child) { foreach ($child as $k => $v) { $this->resetParent($v['to_uid'], $uid); /* $child_parent = $this->getParentAll($v['to_uid']); if ($child_parent) { foreach ($child_parent as $k1 => $v1) { if ($v1['level'] > $v['level']) { Dever::db($this->table)->update(array('where_id' => $v['id'], 'uid' => $parent)); } } }*/ } } return true; } # 清理邀请关系 public function dropParent($uid, $parent) { return Dever::db($this->table)->delete(array('to_uid' => $uid, 'uid' => $parent)); } # 获取某个用户的上级数据 public function getParent($uid, $level = 1) { return Dever::db($this->table)->one(array('to_uid' => $uid, 'level' => $level)); } # 获取某个用户的所有上级数据 public function getParentAll($uid, $level = false, $order = 1) { $where['to_uid'] = $uid; if ($level) { $where['level'] = $level; } if ($order == 1) { return Dever::db($this->table)->getParent($where); } else { return Dever::db($this->table)->getParentLevel($where); } } # 获取某个用户的下级数据 public function getChild($uid, $level = false, $page = true) { $where['uid'] = $uid; if ($level) { $where['level'] = $level; } if ($page) { return Dever::db($this->table)->getChildByPage($where); } else { return Dever::db($this->table)->getChild($where); } } # 获取某个用户在x小时之内的下级数据 public function getChildNum($uid, $level = 1, $start = false, $end = false, $method = 'count') { $where['uid'] = $uid; if ($level) { $where['level'] = $level; } /* if ($time) { $time = $time * 3600; if ($curtime) { if (strstr($curtime, '-')) { $curtime = maketime($curtime); } $cur = $curtime; } else { $cur = time(); } $where['end'] = $cur + $time; } */ if ($start) { $where['start'] = Dever::maketime($start); } if ($end) { $where['end'] = Dever::maketime($end); } if ($method == 'count') { $method = 'getChildCount'; } else { $method = 'getChild'; } return Dever::db($this->table)->$method($where); } # 插入数据 public function add($uid, $to_uid, $level = 1) { $data['uid'] = $uid; $data['to_uid'] = $to_uid; $data['level'] = $level; $data['clear'] = true; $info = Dever::db($this->table)->one($data); if (!$info) { return Dever::db($this->table)->insert($data); } return false; } }