Exemple #1
0
	public function run() {
		$order = $this->getInput('order', 'get');
		$page = intval($this->getInput('page', 'get'));
		
		$threadList = new PwThreadList();
		// $this->runHook('c_thread_run', $forumDisplay);
		$threadList->setPage($page)->setPerpage(Wekit::C('bbs', 'thread.perpage'));
		
		Wind::import('SRV:forum.srv.threadList.PwNewThread');
		$forbidFids = Wekit::load('forum.srv.PwForumService')->getForbidVisitForum($this->loginUser);
		$dataSource = new PwNewThread($forbidFids);
		if ($order == 'postdate') {
			$dataSource->setOrderBy($order);
		} else {
			$dataSource->setOrderBy('lastpost');
		}
		$threadList->execute($dataSource);
		if ($threadList->total > 12000) {
			Wekit::load('forum.PwThreadIndex')->deleteOver($threadList->total - 10000);
		}
		$threaddb = $threadList->getList();
		$fids = array();
		foreach ($threaddb as $key => $value) {
			$fids[] = $value['fid'];
		}
		$forums = Wekit::load('forum.srv.PwForumService')->fetchForum($fids);
		
		if ($operateThread = $this->loginUser->getPermission('operate_thread', false, array())) {
			$operateThread = Pw::subArray($operateThread, array('delete'));
		}
		
		$this->setOutput($threaddb, 'threadList');
		$this->setOutput($forums, 'forums');
		$this->setOutput($threadList->icon, 'icon');
		$this->setOutput($threadList->uploadIcon, 'uploadIcon');
		$this->setOutput(26, 'numofthreadtitle');
		$this->setOutput($order, 'order');
		$this->setOutput($operateThread, 'operateThread');
		
		$this->setOutput($threadList->page, 'page');
		$this->setOutput($threadList->perpage, 'perpage');
		$this->setOutput($threadList->total, 'count');
		$this->setOutput($threadList->maxPage, 'totalpage');
		$this->setOutput($threadList->getUrlArgs(), 'urlargs');
		
		// seo设置
		Wind::import('SRV:seo.bo.PwSeoBo');
		$seoBo = PwSeoBo::getInstance();
		$lang = Wind::getComponent('i18n');
		$threadList->page <=1 && $seoBo->setDefaultSeo($lang->getMessage('SEO:bbs.forum.run.title'), '', $lang->getMessage('SEO:bbs.forum.run.description'));
		$seoBo->init('bbs', 'new');
		$seoBo->set('{page}', $threadList->page);
		Wekit::setV('seo', $seoBo);
	}
Exemple #2
0
 /**
  * 获取多个个缓存 (有缓存性能优化)
  *
  * @param array $keys 查询键值 <例:array('config', 'level', array('group', array($gid)))>
  * @return array
  */
 public function fetch($keys)
 {
     $vkeys = $this->bulidKeys($keys);
     $sids = array();
     foreach ($vkeys as $i => $vkey) {
         if (!isset($this->_cacheData[$vkey])) {
             $value = is_array($keys[$i]) ? $keys[$i] : array($keys[$i], array());
             list($key, $param) = $value;
             $sid = $this->_initServer($key);
             $this->_readykeys[$sid][$vkey] = $value;
             $sids[$sid] = 1;
         }
     }
     if ($sids) {
         $this->_query(array_keys($sids));
     }
     return Pw::subArray($this->_cacheData, $vkeys);
 }
 /**
  * 获得用户拥有的权限 //这个权限在读贴子详细内容时获取,此接口暂时不用
  * 
  * @access public
  * @return void
  * @example
  * <pre>
  * post: tid
  * </pre>
  */
 private function permissionAction()
 {
     $tid = $this->getInput('tid');
     $userBo = new PwUserBo($this->uid);
     Wind::import('SRV:forum.srv.PwThreadDisplay');
     $threadDisplay = new PwThreadDisplay($tid, $userBo);
     $this->runHook('c_read_run', $threadDisplay);
     if (($result = $threadDisplay->check()) !== true) {
         $this->showError($result->getError());
     }
     $_cache = Wekit::cache()->fetch(array('level', 'group_right'));
     $pwforum = $threadDisplay->getForum();
     $isBM = $pwforum->isBM($userBo->username);
     if ($threadPermission = $userBo->getPermission('operate_thread', $isBM, array())) {
         $operateThread = Pw::subArray($threadPermission, array('delete', 'ban'));
         $operateReply = Pw::subArray($threadPermission, array('delete', 'ban'));
     }
     /**
      * if ($hasFirstPart || $hasSecondPart || $hasThirdPart) //只要是版主都可以推荐
      * $operateThread['delete']
      * $operateReply['ban']
      */
     //        print_r($operateThread);
     //        print_r($operateReply);
 }
 public function run()
 {
     $fid = intval($this->getInput('fid'));
     $pwforum = new PwForumBo($fid, true);
     if (!$pwforum->isForum(true)) {
         $this->showError('BBS:forum.exists.not');
     }
     if ($pwforum->allowVisit($this->loginUser) !== true) {
         $this->showError(array('BBS:forum.permissions.visit.allow', array('{grouptitle}' => $this->loginUser->getGroupInfo('name'))));
     }
     if ($pwforum->forumset['jumpurl']) {
         $this->forwardRedirect($pwforum->forumset['jumpurl']);
     }
     if ($pwforum->foruminfo['password']) {
         if (!$this->loginUser->isExists()) {
             $this->forwardAction('u/login/run', array('backurl' => WindUrlHelper::createUrl('bbs/cate/run', array('fid' => $fid))));
         } elseif (Pw::getPwdCode($pwforum->foruminfo['password']) != Pw::getCookie('fp_' . $fid)) {
             $this->forwardAction('bbs/forum/password', array('fid' => $fid));
         }
     }
     $isBM = $pwforum->isBM($this->loginUser->username);
     if ($operateThread = $this->loginUser->getPermission('operate_thread', $isBM, array())) {
         $operateThread = Pw::subArray($operateThread, array('delete'));
     }
     $pwforum->foruminfo['threads'] = $pwforum->foruminfo['subthreads'];
     $this->setOutput($operateThread, 'operateThread');
     $tab = $this->getInput('tab');
     //tab标签
     $page = intval($this->getInput('page', 'get'));
     $orderby = $this->getInput('orderby', 'get');
     $threadList = new PwThreadList();
     $this->runHook('c_cate_run', $threadList);
     $threadList->setPage($page)->setPerpage($pwforum->forumset['threadperpage'] ? $pwforum->forumset['threadperpage'] : Wekit::C('bbs', 'thread.perpage'))->setIconNew($pwforum->foruminfo['newtime']);
     $defaultOrderby = $pwforum->forumset['threadorderby'] ? 'postdate' : 'lastpost';
     !$orderby && ($orderby = $defaultOrderby);
     $isCommon = 0;
     if ($tab == 'digest') {
         Wind::import('SRV:forum.srv.threadList.PwCateDigestThread');
         $dataSource = new PwCateDigestThread($pwforum->fid, $orderby);
     } else {
         Wind::import('SRV:forum.srv.threadList.PwCateThread');
         $srv = Wekit::load('forum.srv.PwForumService');
         $forbidFids = $srv->getForbidVisitForum($this->loginUser, $srv->getForumsByLevel($fid, $srv->getForumMap()), true);
         $dataSource = new PwCateThread($pwforum, $forbidFids);
         $dataSource->setOrderby($orderby);
         $isCommon = 1;
     }
     $orderby != $defaultOrderby && $dataSource->setUrlArg('orderby', $orderby);
     $threadList->execute($dataSource);
     if ($isCommon && $threadList->total > 12000) {
         Wekit::load('forum.PwThreadCateIndex')->deleteOver($fid, $threadList->total - 10000);
     }
     $this->setOutput($threadList, 'threadList');
     $this->setOutput($threadList->getList(), 'threaddb');
     $this->setOutput($tab, 'tab');
     $this->setOutput($defaultOrderby, 'defaultOrderby');
     $this->setOutput($orderby, 'orderby');
     $this->setOutput($pwforum->fid, 'fid');
     $this->setOutput($pwforum, 'pwforum');
     $this->setOutput($pwforum->headguide(), 'headguide');
     $this->setOutput($threadList->icon, 'icon');
     $this->setOutput($threadList->uploadIcon, 'uploadIcon');
     $this->setOutput($pwforum->forumset['numofthreadtitle'] ? $pwforum->forumset['numofthreadtitle'] : 26, 'numofthreadtitle');
     $this->setOutput($threadList->page, 'page');
     $this->setOutput($threadList->perpage, 'perpage');
     $this->setOutput($threadList->total, 'count');
     $this->setOutput($threadList->maxPage, 'totalpage');
     $this->setOutput($threadList->getUrlArgs(), 'urlargs');
     //版块风格
     if ($pwforum->foruminfo['style']) {
         $this->setTheme('forum', $pwforum->foruminfo['style']);
         //$this->addCompileDir($pwforum->foruminfo['style']);
     }
     //seo设置
     Wind::import('SRV:seo.bo.PwSeoBo');
     $seoBo = PwSeoBo::getInstance();
     $lang = Wind::getComponent('i18n');
     if ($threadList->page <= 1) {
         $seoBo->setDefaultSeo($lang->getMessage('SEO:bbs.thread.run.title'), '', $lang->getMessage('SEO:bbs.thread.run.description'));
     }
     $seoBo->init('bbs', 'thread', $fid);
     $seoBo->set(array('{forumname}' => $pwforum->foruminfo['name'], '{forumdescription}' => Pw::substrs($pwforum->foruminfo['descrip'], 100, 0, false), '{classification}' => '', '{page}' => $threadList->page));
     Wekit::setV('seo', $seoBo);
 }
 private function _initVar()
 {
     $creditBo = PwCreditBo::getInstance();
     $sellCreditRange = $this->loginUser->getPermission('sell_credit_range', false, array());
     $allowThreadExtend = $this->loginUser->getPermission('allow_thread_extend', false, array());
     $sellConfig = array('ifopen' => $this->post->forum->forumset['allowsell'] && $allowThreadExtend['sell'] ? 1 : 0, 'price' => $sellCreditRange['maxprice'], 'income' => $sellCreditRange['maxincome'], 'credit' => Pw::subArray($creditBo->cType, $this->loginUser->getPermission('sell_credits')));
     !$sellConfig['credit'] && ($sellConfig['credit'] = array_slice($creditBo->cType, 0, 1, true));
     $enhideConfig = array('ifopen' => $this->post->forum->forumset['allowhide'] && $allowThreadExtend['hide'] ? 1 : 0, 'credit' => Pw::subArray($creditBo->cType, $this->loginUser->getPermission('enhide_credits')));
     !$enhideConfig['credit'] && ($enhideConfig['credit'] = array_slice($creditBo->cType, 0, 1, true));
     $allowUpload = $this->post->user->isExists() && $this->post->forum->allowUpload($this->post->user) && ($this->post->user->getPermission('allow_upload') || $this->post->forum->foruminfo['allow_upload']) ? 1 : 0;
     $attachnum = intval(Wekit::C('attachment', 'attachnum'));
     if ($perday = $this->post->user->getPermission('uploads_perday')) {
         $count = $this->post->user->info['lastpost'] < Pw::getTdtime() ? 0 : $this->post->user->info['todayupload'];
         $attachnum = max(min($attachnum, $perday - $count), 0);
     }
     $this->setOutput(PwSimpleHook::getInstance('PwEditor_app')->runWithFilters(array()), 'editor_app_config');
     $this->setOutput($this->post, 'pwpost');
     $this->setOutput($this->post->getDisabled(), 'needcheck');
     $this->setOutput($this->post->forum->fid, 'fid');
     $this->setOutput($this->post->forum, 'pwforum');
     $this->setOutput($sellConfig, 'sellConfig');
     $this->setOutput($enhideConfig, 'enhideConfig');
     $this->setOutput($allowThreadExtend, 'allowThreadExtend');
     $this->setOutput($allowUpload, 'allowUpload');
     $this->setOutput($attachnum, 'attachnum');
 }
Exemple #6
0
 /**
  * 获取指定版块的信息(使用全部版块缓存,如果没有这个前提,直接使用 forum.PwForum->fetchForum 接口比较合算)
  *
  * @param array $fids;
  * @return array
  */
 public function fetchForum($fids)
 {
     return Pw::subArray($this->getForumList(), $fids);
 }
Exemple #7
0
 /**
  * 帖子列表页
  */
 public function run()
 {
     $tab = $this->getInput('tab');
     $fid = intval($this->getInput('fid'));
     $type = intval($this->getInput('type', 'get'));
     //主题分类ID
     $page = $this->getInput('page', 'get');
     $orderby = $this->getInput('orderby', 'get');
     $pwforum = new PwForumBo($fid, true);
     if (!$pwforum->isForum()) {
         $this->showError('BBS:forum.exists.not');
     }
     if ($pwforum->allowVisit($this->loginUser) !== true) {
         $this->showError(array('BBS:forum.permissions.visit.allow', array('{grouptitle}' => $this->loginUser->getGroupInfo('name'))));
     }
     if ($pwforum->forumset['jumpurl']) {
         $this->forwardRedirect($pwforum->forumset['jumpurl']);
     }
     if ($pwforum->foruminfo['password']) {
         if (!$this->loginUser->isExists()) {
             $this->forwardAction('u/login/run', array('backurl' => WindUrlHelper::createUrl('bbs/cate/run', array('fid' => $fid))));
         } elseif (Pw::getPwdCode($pwforum->foruminfo['password']) != Pw::getCookie('fp_' . $fid)) {
             $this->forwardAction('bbs/forum/password', array('fid' => $fid));
         }
     }
     $isBM = $pwforum->isBM($this->loginUser->username);
     if ($operateThread = $this->loginUser->getPermission('operate_thread', $isBM, array())) {
         $operateThread = Pw::subArray($operateThread, array('topped', 'digest', 'highlight', 'up', 'copy', 'type', 'move', 'lock', 'down', 'delete', 'ban'));
     }
     $this->_initTopictypes($fid, $type);
     $threadList = new PwThreadList();
     $this->runHook('c_thread_run', $threadList);
     $threadList->setPage($page)->setPerpage($pwforum->forumset['threadperpage'] ? $pwforum->forumset['threadperpage'] : Wekit::C('bbs', 'thread.perpage'))->setIconNew($pwforum->foruminfo['newtime']);
     $defaultOrderby = $pwforum->forumset['threadorderby'] ? 'postdate' : 'lastpost';
     !$orderby && ($orderby = $defaultOrderby);
     if ($tab == 'digest') {
         Wind::import('SRV:forum.srv.threadList.PwDigestThread');
         $dataSource = new PwDigestThread($pwforum->fid, $type, $orderby);
     } elseif ($type) {
         Wind::import('SRV:forum.srv.threadList.PwSearchThread');
         $dataSource = new PwSearchThread($pwforum);
         $dataSource->setOrderby($orderby);
         $dataSource->setType($type, $this->_getSubTopictype($type));
     } elseif ($orderby == 'postdate') {
         Wind::import('SRV:forum.srv.threadList.PwNewForumThread');
         $dataSource = new PwNewForumThread($pwforum);
     } else {
         Wind::import('SRV:forum.srv.threadList.PwCommonThread');
         $dataSource = new PwCommonThread($pwforum);
     }
     $orderby != $defaultOrderby && $dataSource->setUrlArg('orderby', $orderby);
     $threadList->execute($dataSource);
     $this->setOutput($threadList, 'threadList');
     $this->setOutput($threadList->getList(), 'threaddb');
     $this->setOutput($fid, 'fid');
     $this->setOutput($type ? $type : null, 'type');
     $this->setOutput($tab, 'tab');
     $this->setOutput($pwforum, 'pwforum');
     $this->setOutput($pwforum->headguide(), 'headguide');
     $this->setOutput($threadList->icon, 'icon');
     $this->setOutput($threadList->uploadIcon, 'uploadIcon');
     $this->setOutput($operateThread, 'operateThread');
     $this->setOutput($pwforum->forumset['numofthreadtitle'] ? $pwforum->forumset['numofthreadtitle'] : 26, 'numofthreadtitle');
     $this->setOutput(!$this->loginUser->uid && !$this->allowPost($pwforum) ? ' J_qlogin_trigger' : '', 'postNeedLogin');
     $this->setOutput($threadList->page, 'page');
     $this->setOutput($threadList->perpage, 'perpage');
     $this->setOutput($threadList->total, 'count');
     $this->setOutput($threadList->maxPage, 'totalpage');
     $this->setOutput($defaultOrderby, 'defaultOrderby');
     $this->setOutput($orderby, 'orderby');
     $this->setOutput($threadList->getUrlArgs(), 'urlargs');
     $this->setOutput($this->_formatTopictype($type), 'topictypes');
     //版块风格
     if ($pwforum->foruminfo['style']) {
         $this->setTheme('forum', $pwforum->foruminfo['style']);
         //$this->addCompileDir($pwforum->foruminfo['style']);
     }
     //seo设置
     Wind::import('SRV:seo.bo.PwSeoBo');
     $lang = Wind::getComponent('i18n');
     if ($threadList->page <= 1) {
         if ($type) {
             PwSeoBo::setDefaultSeo($lang->getMessage('SEO:bbs.thread.run.type.title'), '', $lang->getMessage('SEO:bbs.thread.run.type.description'));
         } else {
             PwSeoBo::setDefaultSeo($lang->getMessage('SEO:bbs.thread.run.title'), '', $lang->getMessage('SEO:bbs.thread.run.description'));
         }
     }
     PwSeoBo::init('bbs', 'thread', $fid);
     PwSeoBo::set(array('{forumname}' => $pwforum->foruminfo['name'], '{forumdescription}' => Pw::substrs($pwforum->foruminfo['descrip'], 100, 0, false), '{classification}' => $this->_getSubTopictypeName($type), '{page}' => $threadList->page));
     Pw::setCookie('visit_referer', 'fid_' . $fid . '_page_' . $threadList->page, 300);
 }
 public function run()
 {
     $page = intval($this->getInput('page', 'get'));
     $page < 1 && ($page = 1);
     $perpage = 20;
     list($start, $limit) = Pw::page2limit($page, $perpage);
     $gid = $this->getInput('gid');
     $url = array();
     if ($gid) {
         $url['gid'] = $gid;
         $current = $gid;
         $user = Wekit::load('attention.PwAttentionType')->getUserByType($this->loginUser->uid, $gid, 2000);
         $uids = array_keys($user);
         $count = $this->_getService()->countAttentionFreshByUid($this->loginUser->uid, $uids);
         Wind::import('SRV:attention.srv.dataSource.PwFetchAttentionFreshByUid');
         $dataSource = new PwFetchAttentionFreshByUid($this->loginUser->uid, $uids, $limit, $start);
     } else {
         $current = 'all';
         $count = $this->_getService()->countAttentionFresh($this->loginUser->uid);
         if ($count > 200) {
             $count > 250 && Wekit::load('attention.PwFresh')->deleteAttentionFresh($this->loginUser->uid, $count - 200);
             $count = 200;
         }
         Wind::import('SRV:attention.srv.dataSource.PwFetchAttentionFresh');
         $dataSource = new PwFetchAttentionFresh($this->loginUser->uid, $limit, $start);
     }
     $freshDisplay = new PwFreshDisplay($dataSource);
     $fresh = $freshDisplay->gather();
     $type = Wekit::load('attention.srv.PwAttentionService')->getAllType($this->loginUser->uid);
     $unpost = '';
     !$this->loginUser->info['lastpost'] && ($this->loginUser->info['lastpost'] = $this->loginUser->info['regdate']);
     $tmp = Pw::getTime() - $this->loginUser->info['lastpost'];
     if ($tmp > 31536000) {
         $unpost = floor($tmp / 31536000) . '年多';
     } elseif ($tmp > 2592000) {
         $unpost = floor($tmp / 2592000) . '个多月';
     } elseif ($tmp > 172800) {
         $unpost = floor($tmp / 86400) . '天';
     }
     $type = Wekit::load('attention.srv.PwAttentionService')->getAllType($this->loginUser->uid);
     $allowUpload = $this->loginUser->getPermission('allow_upload');
     if ($imgextsize = Pw::subArray(Wekit::C('attachment', 'extsize'), array('jpg', 'jpeg', 'png', 'gif', 'bmp'))) {
         $maxSize = max($imgextsize) . ' KB';
         $filetypes = '*.' . implode(';*.', array_keys($imgextsize));
         $attachnum = intval(Wekit::C('attachment', 'attachnum'));
         if ($perday = $this->loginUser->getPermission('uploads_perday')) {
             $todayupload = $this->loginUser->info['lastpost'] < Pw::getTdtime() ? 0 : $this->loginUser->info['todayupload'];
             $attachnum = max(min($attachnum, $perday - $todayupload), 0);
             $attachnum == 0 && ($allowUpload = 0);
         }
     } else {
         $allowUpload = $attachnum = $maxSize = 0;
         $filetypes = '';
     }
     $this->setOutput($allowUpload, 'allowUpload');
     $this->setOutput($attachnum, 'attachnum');
     $this->setOutput($maxSize, 'maxSize');
     $this->setOutput($filetypes, 'filetypes');
     $this->setOutput($current, 'currents');
     $this->setOutput($type, 'type');
     $this->setOutput($unpost, 'unpost');
     $this->setOutput($fresh, 'freshdb');
     $this->setOutput($this->loginUser->getPermission('fresh_delete'), 'freshDelete');
     $this->setOutput($page, 'page');
     $this->setOutput($perpage, 'perpage');
     $this->setOutput($count, 'count');
     $this->setOutput($url, 'url');
     // seo设置
     Wind::import('SRV:seo.bo.PwSeoBo');
     $seoBo = PwSeoBo::getInstance();
     $lang = Wind::getComponent('i18n');
     $seoBo->setCustomSeo($lang->getMessage('SEO:bbs.fresh.run.title'), '', '');
     Wekit::setV('seo', $seoBo);
 }
 /**
 * 查看帖子
 * @access public
 * @return string
 * @example
 <pre>
 /index.php?m=native&c=read&tid=21&fid=8&page=1&_json=1
 cookie:usersession
 response: {err:"",data:""}  
 </pre>
 */
 public function run()
 {
     $tid = intval($this->getInput('tid', 'get'));
     list($page, $uid, $desc) = $this->getInput(array('page', 'uid', 'desc'), 'get');
     $threadDisplay = new PwNativeThreadDisplay($tid, $this->loginUser);
     $this->runHook('c_read_run', $threadDisplay);
     if (($result = $threadDisplay->check()) !== true) {
         $this->showError($result->getError());
     }
     $_cache = Wekit::cache()->fetch(array('level', 'group_right'));
     $pwforum = $threadDisplay->getForum();
     if ($pwforum->foruminfo['password']) {
         if (!$this->uid) {
             $this->forwardAction('u/login/run', array('backurl' => WindUrlHelper::createUrl('bbs/cate/run', array('fid' => ${$pwforum}->fid))));
         } elseif (Pw::getPwdCode($pwforum->foruminfo['password']) != Pw::getCookie('fp_' . $pwforum->fid)) {
             $this->forwardAction('bbs/forum/password', array('fid' => $pwforum->fid));
         }
     }
     if ($uid) {
         Wind::import('SRV:forum.srv.threadDisplay.PwUserRead');
         $dataSource = new PwUserRead($threadDisplay->thread, $uid);
     } else {
         Wind::import('SRV:forum.srv.threadDisplay.PwCommonRead');
         $dataSource = new PwCommonRead($threadDisplay->thread);
     }
     //数据分页
     $perpage = $pwforum->forumset['readperpage'] ? $pwforum->forumset['readperpage'] : Wekit::C('bbs', 'read.perpage');
     $dataSource->setPage($page)->setPerpage($perpage)->setDesc($desc);
     $threadDisplay->setImgLazy(Wekit::C('bbs', 'read.image_lazy'));
     $threadDisplay->execute($dataSource);
     //权限
     $operateReply = $operateThread = array();
     $isBM = $pwforum->isBM($this->loginUser->username);
     if ($threadPermission = $this->loginUser->getPermission('operate_thread', $isBM, array())) {
         $operateReply = Pw::subArray($threadPermission, array('toppedreply', 'remind', 'shield', 'delete', 'ban', 'inspect', 'read'));
         $operateThread = Pw::subArray($threadPermission, array('digest', 'topped', 'up', 'highlight', 'copy', 'type', 'move', 'lock', 'down', 'delete', 'ban'));
     }
     isset($operateThread['topped']) && ($operateThread['topped'] = $this->loginUser->gid == 3 && $operateThread ? "1" : "0");
     //主题的信息
     $threadInfo = $threadDisplay->getThreadInfo();
     //帖子收藏统计
     $collectInfo = $this->_getCollectService()->countCollectByTids(array($threadInfo['tid']));
     //用户是否收藏过帖子
     $collectStatusInfo = array();
     if ($this->uid) {
         $collectStatusInfo = $this->_getCollectService()->getCollectByUidAndTids($this->uid, array($threadInfo['tid']));
     }
     //获得板块信息
     $forumInfo = $threadDisplay->getForum();
     $simpleForumInfo = array('fid' => $forumInfo->fid, 'name' => preg_replace('/<\\/?[^>]+>/i', '', $forumInfo->foruminfo['name']));
     //帖子数据列表
     $threadList = $threadDisplay->getList();
     //回复帖子列表
     $pids = array();
     foreach ($threadList as $key => $v) {
         $threadList[$key]['created_user_avatar'] = Pw::getAvatar($v['created_userid'], 'small');
         $threadList[$key]['created_time'] = Pw::time2str($v['created_time'], 'auto');
         //
         if (isset($v['pid'])) {
             $pids[] = $v['pid'];
         }
     }
     //获得用户是否喜欢过帖子|回复
     $threadLikeData = $postLikeData = array();
     if ($this->uid) {
         $threadLikeData = $this->_getLikeReplyService()->getAllLikeUserids(PwLikeContent::THREAD, array($tid));
         $_postLikeData = $this->_getLikeReplyService()->getAllLikeUserids(PwLikeContent::POST, $pids);
         if (!empty($pids)) {
             foreach ($pids as $v) {
                 if (isset($_postLikeData[$v])) {
                     $postLikeData[$v] = array_search($this->uid, $_postLikeData[$v]) === false ? 0 : 1;
                 }
             }
         }
     }
     //帖子发布来源
     $threadFromtypeList = $this->_getThreadsPlaceService()->getThreadFormTypeByTids(array($tid));
     //主帖的相关信息
     $simpleThreadInfo = array('uid' => $threadInfo['created_userid'], 'tid' => $threadInfo['tid'], 'fid' => $threadInfo['fid'], 'subject' => $threadInfo['subject'], 'replies' => $threadInfo['replies'], 'like_count' => $threadInfo['like_count'], 'collect_count' => isset($collectInfo[$threadInfo['tid']]) ? $collectInfo[$threadInfo['tid']]['sum'] : 0, 'like_status' => isset($threadLikeData[$tid]) && array_search($this->uid, $threadLikeData[$tid]) !== false ? 1 : 0, 'collect_status' => isset($collectStatusInfo[$tid]) && array_search($this->uid, $collectStatusInfo[$tid]) !== false ? 1 : 0, 'display_title' => isset($threadFromtypeList[$tid]) && $threadFromtypeList[$tid] ? 1 : 0);
     $simpleForumInfo['display_title'] = $simpleThreadInfo['display_title'];
     //位置
     $threadPlace = $this->_getThreadPlaceService()->fetchByTids(array($tid));
     $postPlace = $this->_getPostPlaceService()->fetchByPids($pids);
     //附件
     $threadAttachs = array();
     if (isset($threadDisplay->attach->attachs)) {
         foreach ($threadDisplay->attach->attachs as $k => $v) {
             foreach ($v as $kk => $vv) {
                 $threadAttachs['attachs'][$k][$kk] = array('aid' => $vv['aid'], 'name' => $vv['name'], 'type' => $vv['type'], 'url' => $vv['url']);
             }
         }
     }
     if (isset($threadDisplay->attach->showlist)) {
         foreach ($threadDisplay->attach->showlist as $k => $v) {
             foreach ($v as $kk => $vv) {
                 foreach ($vv as $kkk => $vvv) {
                     $threadAttachs['showlist'][$k][$kk][$kkk] = array('aid' => $vvv['aid'], 'name' => $vvv['name'], 'type' => $vvv['type'], 'url' => $vvv['url']);
                 }
             }
         }
     }
     unset($threadDisplay->attach);
     //
     $poll = '';
     if ($threadList[0]['special'] == 'poll') {
         //是投票帖子
         $res = Wekit::load('poll.PwThreadPoll')->getPoll($tid);
         $poll_id = $res['poll_id'];
         $options = Wekit::load('poll.PwPollOption')->getByPollid($poll_id);
         $vote_total = 0;
         foreach ($options as $k => $v) {
             if ($v['image']) {
                 $options[$k]['image'] = PUBLIC_URL . "/attachment/" . $v['image'];
             }
             $voted_total += $v['voted_num'];
         }
         //            $count = Wekit::load('poll.PwPollOption')->countByPollid($poll_id);
         //            var_dump($options);exit;
         $res = Wekit::load('poll.PwPoll')->getPoll($poll_id);
         $poll_state = $this->uid ? Wekit::load('poll.PwPollVoter')->isVoted($this->uid, $poll_id) : true;
         $poll = array('poll_id' => $poll_id, 'isafter_view' => (int) $res['isafter_view'], 'option_limit' => (int) $res['option_limit'], 'expired_time' => $res['expired_time'] ? Pw::time2str($res['expired_time']) : "无限期", 'poll_state' => $poll_state, 'voted_total' => $voted_total, 'options' => $options);
     }
     //        var_dump($poll);exit;
     //        var_dump($threadList[0]);exit;
     $sell = false;
     if ($this->uid && strpos($threadList[0]['content'], '[sell') !== false && $threadList[0]['created_userid'] != $this->uid) {
         //含有售卖内容,当前用户不是作者
         //获取用户是否购买过帖子
         $res = Wekit::loadDao('native.dao.PwNativeThreadsBuyDao')->getBuyRecord($tid, $this->uid);
         if (!$res) {
             //用户未购买过帖子
             $start = strpos($threadList[0]['content'], '[sell=');
             $start += 6;
             $end = strpos($threadList[0]['content'], ']', $start);
             $cost = substr($threadList[0]['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];
             $myCredit = $this->loginUser->getCredit($credittype);
             //                var_dump($cost,$creditvalue,$credittype,$creditType,$myCredit);exit;
             $sell = array('credit_value' => $creditvalue, 'user_credit' => $myCredit, 'credit_name' => $creditType);
         }
     }
     //获取最近点赞的5个人
     $res = Wekit::loadDao('native.dao.PwNativeLikeContentDao')->getLikeidByFromid($tid);
     $likeUsers = array();
     if (isset($res['likeid'])) {
         $uids = Wekit::loadDao('native.dao.PwNativeLikeLogDao')->fetchUidsByLikeid($res['likeid']);
         $res = Wekit::loadDao('user.dao.PwUserDao')->fetchUserByUid($uids);
         foreach ($res as $v) {
             $likeUsers[] = $v['username'];
         }
     }
     $data = array('uid' => $this->uid, 'operateReply' => $operateReply, 'operateThread' => $operateThread, 'simpleForumInfo' => $simpleForumInfo, 'simpleThreadInfo' => $simpleThreadInfo, 'threadList' => $page <= $perpage ? $threadList : array(), 'pageCount' => ceil($threadDisplay->total / $perpage), 'threadAttachs' => $threadAttachs, 'threadPlace' => $threadPlace, 'postPlace' => $postPlace, 'postLikeData' => $postLikeData, 'poll' => $poll, 'sell' => $sell, 'likeUsers' => $likeUsers);
     $this->setOutput($data, 'data');
     $this->showMessage('success');
 }
Exemple #10
0
 /**
  * 帖子阅读页
  */
 public function run()
 {
     $tid = intval($this->getInput('tid'));
     list($page, $uid, $desc) = $this->getInput(array('page', 'uid', 'desc'), 'get');
     $threadDisplay = new PwThreadDisplay($tid, $this->loginUser);
     $this->runHook('c_read_run', $threadDisplay);
     if (($result = $threadDisplay->check()) !== true) {
         $this->showError($result->getError());
     }
     $_cache = Wekit::cache()->fetch(array('level', 'group_right'));
     $pwforum = $threadDisplay->getForum();
     if ($pwforum->foruminfo['password']) {
         if (!$this->loginUser->isExists()) {
             $this->forwardAction('u/login/run', array('backurl' => WindUrlHelper::createUrl('bbs/cate/run', array('fid' => ${$pwforum}->fid))));
         } elseif (Pw::getPwdCode($pwforum->foruminfo['password']) != Pw::getCookie('fp_' . $pwforum->fid)) {
             $this->forwardAction('bbs/forum/password', array('fid' => $pwforum->fid));
         }
     }
     if ($uid) {
         Wind::import('SRV:forum.srv.threadDisplay.PwUserRead');
         $dataSource = new PwUserRead($threadDisplay->thread, $uid);
     } else {
         Wind::import('SRV:forum.srv.threadDisplay.PwCommonRead');
         $dataSource = new PwCommonRead($threadDisplay->thread);
     }
     $dataSource->setPage($page)->setPerpage($pwforum->forumset['readperpage'] ? $pwforum->forumset['readperpage'] : Wekit::C('bbs', 'read.perpage'))->setDesc($desc);
     $threadDisplay->setImgLazy(Wekit::C('bbs', 'read.image_lazy'));
     $threadDisplay->execute($dataSource);
     $operateReply = $operateThread = array();
     $isBM = $pwforum->isBM($this->loginUser->username);
     if ($threadPermission = $this->loginUser->getPermission('operate_thread', $isBM, array())) {
         $operateReply = Pw::subArray($threadPermission, array('toppedreply', 'remind', 'shield', 'delete', 'ban', 'inspect', 'read'));
         $operateThread = Pw::subArray($threadPermission, array('digest', 'topped', 'up', 'highlight', 'copy', 'type', 'move', 'lock', 'down', 'delete', 'ban'));
     }
     $threadInfo = $threadDisplay->getThreadInfo();
     $this->setOutput($threadDisplay, 'threadDisplay');
     $this->setOutput($tid, 'tid');
     $this->setOutput($threadDisplay->fid, 'fid');
     $this->setOutput($threadInfo, 'threadInfo');
     $this->setOutput($threadDisplay->getList(), 'readdb');
     $this->setOutput($threadDisplay->getUsers(), 'users');
     $this->setOutput($pwforum, 'pwforum');
     $this->setOutput(PwCreditBo::getInstance(), 'creditBo');
     $this->setOutput($threadDisplay->getHeadguide(), 'headguide');
     $this->setOutput(Wekit::C('bbs', 'read.display_member_info'), 'displayMemberInfo');
     $this->setOutput(Wekit::C('bbs', 'read.display_info'), 'displayInfo');
     $this->setOutput(Wekit::C('bbs', 'thread.hotthread_replies'), 'hotIcon');
     $this->setOutput($threadPermission, 'threadPermission');
     $this->setOutput($operateThread, 'operateThread');
     $this->setOutput($operateReply, 'operateReply');
     $this->setOutput(!$this->loginUser->uid && !$this->allowPost($pwforum) ? ' J_qlogin_trigger' : '', 'postNeedLogin');
     $this->setOutput(!$this->loginUser->uid && !$this->allowReply($pwforum) ? ' J_qlogin_trigger' : '', 'replyNeedLogin');
     $this->setOutput($_cache['level']['ltitle'], 'ltitle');
     $this->setOutput($_cache['level']['lpic'], 'lpic');
     $this->setOutput($_cache['level']['lneed'], 'lneed');
     $this->setOutput($_cache['group_right'], 'groupRight');
     $this->setOutput($threadDisplay->page, 'page');
     $this->setOutput($threadDisplay->perpage, 'perpage');
     $this->setOutput($threadDisplay->total, 'count');
     $this->setOutput($threadDisplay->maxpage, 'totalpage');
     $this->setOutput($threadDisplay->getUrlArgs(), 'urlargs');
     $this->setOutput($threadDisplay->getUrlArgs('desc'), 'urlDescArgs');
     $this->setOutput($this->loginUser->getPermission('look_thread_log', $isBM, array()), 'canLook');
     $this->setOutput($this->_getFpage($threadDisplay->fid), 'fpage');
     //版块风格
     if ($pwforum->foruminfo['style']) {
         $this->setTheme('forum', $pwforum->foruminfo['style']);
         //$this->addCompileDir($pwforum->foruminfo['style']);
     }
     // seo设置
     Wind::import('SRV:seo.bo.PwSeoBo');
     $seoBo = PwSeoBo::getInstance();
     $lang = Wind::getComponent('i18n');
     $threadDisplay->page <= 1 && $seoBo->setDefaultSeo($lang->getMessage('SEO:bbs.read.run.title'), '', $lang->getMessage('SEO:bbs.read.run.description'));
     $seoBo->init('bbs', 'read');
     $seoBo->set(array('{forumname}' => $threadDisplay->forum->foruminfo['name'], '{title}' => $threadDisplay->thread->info['subject'], '{description}' => Pw::substrs($threadDisplay->thread->info['content'], 100, 0, false), '{classfication}' => $threadDisplay->thread->info['topic_type'], '{tags}' => $threadInfo['tags'], '{page}' => $threadDisplay->page));
     Wekit::setV('seo', $seoBo);
     //是否显示回复
     $showReply = true;
     //锁定时间
     if ($pwforum->forumset['locktime'] && $threadInfo['created_time'] + $pwforum->forumset['locktime'] * 86400 < Pw::getTime()) {
         $showReply = false;
     } elseif (Pw::getstatus($threadInfo['tpcstatus'], PwThread::STATUS_LOCKED) && !$this->loginUser->getPermission('reply_locked_threads')) {
         $showReply = false;
     }
     $this->setOutput($showReply, 'showReply');
     $this->runReadDesign($threadDisplay->fid);
     $this->updateReadOnline($threadDisplay->fid, $tid);
 }