DiscuzX/upload/source/plugin/wechat/wsqapi.class.php

150 lines
5.6 KiB
PHP

<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: wsqapi.class.php 34924 2014-08-27 06:33:08Z nemohou $
*/
if (!defined('IN_DISCUZ')) {
exit('Access Denied');
}
class WSQAPI {
function forumdisplay_variables(&$variables) {
global $_G;
if(!$_G['wechat']['setting']['wsq_allow'] || !$_G['wechat']['setting']['showactivity']['tids']) {
return;
}
$tids = array();
foreach ($variables['forum_threadlist'] as &$thread) {
if(in_array($thread['tid'], $_G['wechat']['setting']['showactivity']['tids'])) {
$thread['showactivity'] = 1;
$tids[] = $thread['tid'];
}
}
$activities = C::t('forum_activity')->fetch_all($tids);
foreach($activities as $tid => $activity) {
$variables['showactivity'][$tid]['starttimefrom'] = dgmdate($activities[$tid]['starttimefrom']);
$variables['showactivity'][$tid]['expiration'] = dgmdate($activities[$tid]['expiration']);
$variables['showactivity'][$tid]['applynumber'] = $activities[$tid]['applynumber'];
$variables['showactivity'][$tid]['thumb'] = $activity['aid'] ? $_G['siteurl'].getforumimg($activity['aid'], 0, 400, 400) : '';
}
}
function viewthread_variables(&$variables) {
if(!showActivity::init()) {
return;
}
global $_G;
$variables['thread']['showactivity'] = 1;
$variables['special_activity']['thumb'] = preg_match('/^http:\//', $GLOBALS['activity']['thumb']) ? $GLOBALS['activity']['thumb'] : $_G['siteurl'].$GLOBALS['activity']['thumb'];
unset($variables['special_activity']['attachurl']);
if(empty($_GET['viewpid'])) {
if(!$_GET['viewhot']) {
$pids = array();
foreach($variables['postlist'] as $post) {
$pids[] = $post['pid'];
}
if($pids) {
$posts = DB::fetch_all("SELECT pid, voters FROM %t WHERE pid IN (%n)", array('forum_debatepost', $pids), 'pid');
$voters = array();
foreach($variables['postlist'] as $key => $post) {
$variables['postlist'][$key]['voters'] = intval($posts[$post['pid']]['voters']);
if($_G['page'] == 1 && !$post['first'] && $_G['uid'] && $_G['uid'] == $post['authorid']) {
unset($variables['postlist'][$key]);
}
}
}
$variables['postlist'] = array_values($variables['postlist']);
$myarr = array();
if($_G['uid'] && $_G['page'] == 1) {
$pids = array();
$posts = C::t('forum_post')->fetch_all_common_viewthread_by_tid($_G['tid'], 0, $_G['uid'], 1, 2, 0, 0, 0);
foreach($posts as $pid => $post) {
$myarr[$pid] = array(
'pid' => $pid,
'author' => $post['author'],
'authorid' => $post['authorid'],
'voters' => 0,
);
$pids[] = $post['pid'];
}
$posts = DB::fetch_all("SELECT pid, voters FROM %t WHERE pid IN (%n)", array('forum_debatepost', $pids), 'pid');
foreach($posts as $pid => $post) {
$myarr[$pid]['voters'] = intval($post['voters']);
}
if($myarr) {
require_once libfile('function/attachment');
parseattach(array_keys($myarr), array(), $myarr);
}
}
$variables['special_activity']['my_postlist'] = array_values($myarr);
$variables['special_activity']['view'] = 'new';
} else {
foreach($variables['postlist'] as $key => $post) {
if(!$post['first']) {
unset($variables['postlist'][$key]);
}
}
$cachekey = 'showactivity_'.$_G['tid'];
loadcache($cachekey);
if(!$_G['cache'][$cachekey] || TIMESTAMP - $_G['cache'][$cachekey]['expiration'] > 600) {
$posts = DB::fetch_all("SELECT pid, voters FROM %t d WHERE tid=%d AND voters>1 ORDER BY voters DESC LIMIT 500", array('forum_debatepost', $_G['tid']), 'pid');
foreach($posts as $vpost) {
$voters[$vpost['pid']] = $vpost['voters'];
}
$top = 1;
$toparr = array();
$posts = C::t('forum_post')->fetch_all_by_pid('tid:'.$_G['tid'], array_keys($voters), false, '', 0, 0, null, 0);
foreach($voters as $pid => $voters) {
if($posts[$pid]) {
$toparr[$pid] = array(
'pid' => $pid,
'author' => $posts[$pid]['author'],
'authorid' => $posts[$pid]['authorid'],
'voters' => $voters,
'top' => $top++
);
if($top > 50) {
break;
}
}
}
$variables['special_activity']['top_postlist'] = $toparr;
savecache($cachekey, array('variable' => $toparr, 'expiration' => TIMESTAMP));
} else {
$variables['special_activity']['top_postlist'] = $_G['cache'][$cachekey]['variable'];
}
$hotpage = max(1, $_GET['page']);
$start = max(0, ($hotpage - 1) * $_G['ppp']);
$toplist = & $variables['special_activity']['top_postlist'];
$toplist = array_slice($toplist, $start, $_G['ppp'], 1);
require_once libfile('function/attachment');
parseattach(array_keys($toplist), array(), $toplist);
$toplist = array_values($toplist);
$variables['special_activity']['view'] = 'hot';
}
} else {
$comments = array();
foreach($GLOBALS['comments'][$_GET['viewpid']] as $comment) {
$comments[] = array(
'author' => $comment['author'],
'authorid' => $comment['authorid'],
'avatar' => avatar($comment['authorid'], 'small', 1),
'message' => $comment['comment'],
'dateline' => strip_tags(dgmdate($comment['dateline'], 'u')),
);
}
$variables['postlist'] = array_merge($variables['postlist'], $comments);
$variables['thread']['replies'] = $GLOBALS['commentcount'][$_GET['viewpid']];
$voters = C::t('forum_debatepost')->fetch($_GET['viewpid']);
$variables['thread']['recommend_add'] = $voters['voters'];
}
}
}