예제 #1
0
 /**
  * 自动禁止用户
  * 
  * 用户积分有变动的时候执行
  * 在用户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;
 }
예제 #2
0
 /**
  * 判断用户是否可以购买邀请码
  *
  * @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;
 }