/** * 添加一条记录 * * @param PwThreadBuyDm $dm 帖子购买记录数据模型 * return mixed */ public function add(PwThreadBuyDm $dm) { if (($result = $dm->beforeAdd()) !== true) { return $result; } return $this->_getDao()->add($dm->getData()); }
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); }