/** * 自动禁止用户 * * 用户积分有变动的时候执行 * 在用户s_PwUserDataDao_update处作为hook执行 * * @param int $uid * @param array $fields * @param array $increaseFields * @return array */ public function autoBan($uid, $fields, $increaseFields) { //[如果自动禁止没有开启] $config = Wekit::C('site'); if (0 == $config['autoForbidden.open'] || !$config['autoForbidden.type']) { return false; } //[自动禁止积分依据]如果更新的积分没有在禁止积分范围内 $credit = $config['autoForbidden.condition']['credit']; $key = 'credit' . $credit; if (!in_array($key, array_keys($fields)) && !in_array($key, array_keys($increaseFields))) { return false; } //[禁止积分依据有没有到达禁止条件] $userBo = new PwUserBo($uid); if ($userBo->getCredit($credit) >= $config['autoForbidden.condition']['num']) { return false; } //执行禁止操作 $dmList = array(); $endTime = $config['autoForbidden.day'] > 0 ? $config['autoForbidden.day'] * 24 * 3600 + Pw::getTime() : 0; foreach ($config['autoForbidden.type'] as $type) { $banDm = new PwUserBanInfoDm(); $banDm->setEndTime($endTime)->setTypeid($type)->setReason($config['autoForbidden.reason'])->setCreatedUid(0)->setUid($uid); $dmList[] = $banDm; } $this->banUser($dmList); //发送消息 $_notice = array($uid => array('end_time' => $endTime, 'reason' => $config['autoForbidden.reason'], 'type' => $config['autoForbidden.type'], 'operator' => 'system')); $this->sendNotice($_notice, 1); return true; }
/** * 判断用户是否可以购买邀请码 * * @param PwUserBo $user 购买的用户 * @param int $num 购买的数量 * @param int $creditType 用于购买的积分类型 * @return boolean|PwError */ public function allowBuyInviteCode(PwUserBo $user, $num, $creditType) { if (!WindValidator::isPositive($num)) { return new PwError('USER:invite.buy.num.error'); } $num = intval($num); //用户组能购买的邀请码数量限制 $startTime = Pw::str2time(Pw::time2str(Pw::getTime(), 'Y-m-d')); $readyBuy = $this->_getDs()->countByUidAndTime($user->uid, $startTime); $gidLimit = abs(ceil($user->getPermission('invite_limit_24h'))); if ($readyBuy + $num > $gidLimit) { return new PwError('USER:invite.buy.num.24h.limit', array('{num}' => $gidLimit, '{readynum}' => $readyBuy)); } $price = abs(ceil($user->getPermission('invite_buy_credit_num'))); if ($price * $num > $user->getCredit($creditType)) { return new PwError('USER:invite.buy.credit.no.enough', array('{num}' => $user->getCredit($creditType), '{buynum}' => $num)); } return true; }