Пример #1
0
 public function buyAction()
 {
     list($tid, $pid) = $this->getInput(array('tid', 'pid'));
     $submit = (int) $this->getInput('submit', 'get');
     if (!$this->loginUser->isExists()) {
         $this->showError('login.not');
     }
     if (!$tid) {
         $this->showError('data.error');
     }
     if ($pid) {
         $result = Wekit::load('forum.PwThread')->getPost($pid);
     } else {
         $pid = 0;
         $result = Wekit::load('forum.PwThread')->getThread($tid, PwThread::FETCH_ALL);
     }
     if (empty($result) || $result['tid'] != $tid) {
         $this->showError('data.error');
     }
     $start = strpos($result['content'], '[sell=');
     if ($start === false) {
         $this->showError('BBS:thread.buy.error.sell.not');
     }
     $start += 6;
     $end = strpos($result['content'], ']', $start);
     $cost = substr($result['content'], $start, $end - $start);
     list($creditvalue, $credittype) = explode(',', $cost);
     Wind::import('SRV:credit.bo.PwCreditBo');
     $creditBo = PwCreditBo::getInstance();
     isset($creditBo->cType[$credittype]) || ($credittype = key($creditBo->cType));
     $creditType = $creditBo->cType[$credittype];
     if ($result['created_userid'] == $this->loginUser->uid) {
         $this->showError('BBS:thread.buy.error.self');
     }
     if (Wekit::load('forum.PwThreadBuy')->get($tid, $pid, $this->loginUser->uid)) {
         $this->showError('BBS:thread.buy.error.already');
     }
     if (($myCredit = $this->loginUser->getCredit($credittype)) < $creditvalue) {
         $this->showError(array('BBS:thread.buy.error.credit.notenough', array('{myCredit}' => $myCredit . $creditType, '{count}' => $creditvalue . $creditType)));
     }
     !$submit && $this->showMessage(array('BBS:thread.buy.message.buy', array('{count}' => $myCredit . $creditType, '{buyCount}' => -$creditvalue . $creditType)));
     Wind::import('SRV:forum.dm.PwThreadBuyDm');
     $dm = new PwThreadBuyDm();
     $dm->setTid($tid)->setPid($pid)->setCreatedUserid($this->loginUser->uid)->setCreatedTime(Pw::getTime())->setCtype($credittype)->setCost($creditvalue);
     Wekit::load('forum.PwThreadBuy')->add($dm);
     $creditBo->addLog('buythread', array($credittype => -$creditvalue), $this->loginUser, array('title' => $result['subject'] ? $result['subject'] : Pw::substrs($result['content'], 20)));
     $creditBo->set($this->loginUser->uid, $credittype, -$creditvalue, true);
     $user = new PwUserBo($result['created_userid']);
     if (($max = $user->getPermission('sell_credit_range.maxincome')) && Wekit::load('forum.PwThreadBuy')->sumCost($tid, $pid) > $max) {
     } else {
         $creditBo->addLog('sellthread', array($credittype => $creditvalue), $user, array('title' => $result['subject'] ? $result['subject'] : Pw::substrs($result['content'], 20)));
         $creditBo->set($user->uid, $credittype, $creditvalue, true);
     }
     $creditBo->execute();
     if ($pid) {
         Wind::import('SRV:forum.dm.PwReplyDm');
         $dm = new PwReplyDm($pid);
         $dm->addSellCount(1);
         Wekit::load('forum.PwThread')->updatePost($dm);
     } else {
         Wind::import('SRV:forum.dm.PwTopicDm');
         $dm = new PwTopicDm($tid);
         $dm->addSellCount(1);
         Wekit::load('forum.PwThread')->updateThread($dm, PwThread::FETCH_CONTENT);
     }
     $this->showMessage('success', 'bbs/read/run/?tid=' . $tid . '&fid=' . $result['fid'], true);
 }