\n". "\n". " \n". " {$_G[setting][bbname]} - $lang[guide] - ".$lang['guide_'.$view]."\n". " {$_G[siteurl]}forum.php?mod=guide&view=$view\n". " ".$lang['guide_'.$view]."\n". " Copyright(C) {$_G[setting][bbname]}\n". " Discuz! Board by Comsenz Inc.\n". " ".gmdate('r', TIMESTAMP)."\n". " $ttl\n". " \n". " {$_G[siteurl]}static/image/common/logo_88_31.gif\n". " {$_G[setting][bbname]}\n". " {$_G[siteurl]}\n". " \n"; $info = C::t('forum_rsscache')->fetch_all_by_guidetype($view, $perpage); if(empty($info) || (TIMESTAMP - $info[0]['lastupdate'] > $ttl * 60)) { update_guide_rsscache($view, $perpage); } foreach($info as $thread) { list($thread['description'], $attachremote, $attachfile, $attachsize) = explode("\t", $thread['description']); if($attachfile) { if($attachremote) { $filename = $_G['setting']['ftp']['attachurl'].'forum/'.$attachfile; } else { $filename = $_G['siteurl'].$_G['setting']['attachurl'].'forum/'.$attachfile; } } echo " \n". " ".$thread['subject']."\n". " $_G[siteurl]".($trewriteflag ? rewriteoutput('forum_viewthread', 1, '', $thread['tid']) : "forum.php?mod=viewthread&tid=$thread[tid]")."\n". " \n". " ".dhtmlspecialchars($thread['forum'])."\n". " ".dhtmlspecialchars($thread['author'])."\n". ($attachfile ? '' : ''). " ".gmdate('r', $thread['dateline'])."\n". " \n"; } echo " \n". ""; exit(); } if($view != 'index') { $theurl = 'forum.php?mod=guide&view='.$view; if($view == 'my') { if(!$_G['uid']) { showmessage('to_login', '', array(), array('login' => 1)); } $lang = lang('forum/template'); $filter_array = array( 'common' => $lang['have_posted'], 'save' => $lang['guide_draft'], 'close' => $lang['close'], 'aduit' => $lang['pending'], 'ignored' => $lang['have_ignored'], 'recyclebin' => $lang['forum_recyclebin']); $viewtype = in_array($_GET['type'], array('reply', 'thread', 'postcomment')) ? $_GET['type'] : 'thread'; if($searchkey = stripsearchkey($_GET['searchkey'])) { $searchkey = dhtmlspecialchars($searchkey); } $theurl .= '&type='.$viewtype; $filter = in_array($_GET['filter'], array_keys($filter_array)) ? $_GET['filter'] : ''; $searchbody = 0; if($filter) { $theurl .= '&filter='.$filter; $searchbody = 1; } if($_GET['fid']) { $theurl .= '&fid='.intval($_GET['fid']); $searchbody = 1; } if($searchkey) { $theurl .= '&searchkey='.$searchkey; $searchbody = 1; } require_once libfile('function/forumlist'); $forumlist = forumselect(FALSE, 0, intval($_GET['fid'])); $data['my'] = get_my_threads($viewtype, $_GET['fid'], $filter, $searchkey, $start, $perpage, $theurl); $tids = $data['my']['tids']; $posts = $data['my']['posts']; } else { $data[$view] = get_guide_list($view, $start, $perpage); } if(empty($data['my']['multi'])) { $multipage = multi($data[$view]['threadcount'], $perpage, $_G['page'], $theurl, $_G['setting']['threadmaxpages']); } else { $multipage = $data['my']['multi']; } } else { $data['hot'] = get_guide_list('hot', 0, 30); $data['digest'] = get_guide_list('digest', 0, 30); $data['new'] = get_guide_list('new', 0, 30); $data['newthread'] = get_guide_list('newthread', 0, 30); } loadcache('stamps'); $currentview[$view] = 'class="xw1 a"'; $navigation = $view != 'index' ? ' '.$lang['guide_'.$view].'' : ''; include template('forum/guide'); function get_guide_list($view, $start = 0, $num = 50, $again = 0) { global $_G; $setting_guide = unserialize($_G['setting']['guide']); if(!in_array($view, array('hot', 'digest', 'new', 'newthread', 'sofa'))) { return array(); } loadcache('forums'); $cachetimelimit = ($view != 'sofa') ? 900 : 60; $cache = $_G['cache']['forum_guide'][$view.($view=='sofa' && $_G['fid'] ? $_G['fid'] : '')]; if($cache && (TIMESTAMP - $cache['cachetime']) < $cachetimelimit) { $tids = $cache['data']; $threadcount = count($tids); $tids = array_slice($tids, $start, $num, true); $updatecache = false; if(empty($tids)) { return array(); } } else { $dateline = 0; $maxnum = 50000; if($setting_guide[$view.'dt']) { $dateline = time() - intval($setting_guide[$view.'dt']); } if($view != 'sofa') { $maxtid = C::t('forum_thread')->fetch_max_tid(); $limittid = max(0,($maxtid - $maxnum)); if($again) { $limittid = max(0,($limittid - $maxnum)); } $tids = array(); } foreach($_G['cache']['forums'] as $fid => $forum) { if($forum['type'] != 'group' && $forum['status'] > 0 && !$forum['viewperm'] && !$forum['havepassword']) { $fids[] = $fid; } } if(empty($fids)) { return array(); } if($view == 'sofa') { if($_GET['fid']) { $sofa = C::t('forum_sofa')->fetch_all_by_fid($_GET['fid'], $start, $num); } else { $sofa = C::t('forum_sofa')->range($start, $num); foreach($sofa as $sofatid => $sofathread) { if(!in_array($sofathread, $fids)) { unset($sofathread[$sofatid]); } } } $tids = array_keys($sofa); } $updatecache = true; } $query = C::t('forum_thread')->fetch_all_for_guide($view, $limittid, $tids, $_G['setting']['heatthread']['guidelimit'], $dateline); $n = 0; foreach($query as $thread) { if(empty($tids) && ($thread['isgroup'] || !in_array($thread['fid'], $fids))) { continue; } if($thread['displayorder'] < 0) { continue; } $thread = guide_procthread($thread); $threadids[] = $thread['tid']; if($tids || ($n >= $start && $n < ($start + $num))) { $list[$thread[tid]] = $thread; $fids[$thread[fid]] = $thread['fid']; } $n ++; } if($limittid > $maxnum && !$again && count($list) < 50) { return get_guide_list($view, $start, $num, 1); } $forumnames = array(); if($fids) { $forumnames = C::t('forum_forum')->fetch_all_name_by_fid($fids); } $threadlist = array(); if($tids) { $threadids = array(); foreach($tids as $key => $tid) { if($list[$tid]) { $threadlist[$key] = $list[$tid]; $threadids[] = $tid; } } } else { $threadlist = $list; } unset($list); if($updatecache) { $threadcount = count($threadids); $data = array('cachetime' => TIMESTAMP, 'data' => $threadids); $_G['cache']['forum_guide'][$view.($view=='sofa' && $_G['fid'] ? $_G['fid'] : '')] = $data; savecache('forum_guide', $_G['cache']['forum_guide']); } return array('forumnames' => $forumnames, 'threadcount' => $threadcount, 'threadlist' => $threadlist); } function get_my_threads($viewtype, $fid = 0, $filter = '', $searchkey = '', $start = 0, $perpage = 20, $theurl = '') { global $_G; $fid = $fid ? intval($fid) : null; loadcache('forums'); $dglue = '='; if($viewtype == 'thread') { $authorid = $_G['uid']; $dglue = '='; if($filter == 'recyclebin') { $displayorder = -1; } elseif($filter == 'aduit') { $displayorder = -2; } elseif($filter == 'ignored') { $displayorder = -3; } elseif($filter == 'save') { $displayorder = -4; } elseif($filter == 'close') { $closed = 1; } elseif($filter == 'common') { $closed = 0; $displayorder = 0; $dglue = '>='; } $gids = $fids = $forums = array(); foreach(C::t('forum_thread')->fetch_all_by_authorid_displayorder($authorid, $displayorder, $dglue, $closed, $searchkey, $start, $perpage, null, $fid) as $tid => $value) { if(!isset($_G['cache']['forums'][$value['fid']])) { $gids[$value['fid']] = $value['fid']; } else { $forumnames[$value['fid']] = array('fid'=> $value['fid'], 'name' => $_G['cache']['forums'][$value['fid']]['name']); } $list[$value['tid']] = guide_procthread($value); } if(!empty($gids)) { $gforumnames = C::t('forum_forum')->fetch_all_name_by_fid($gids); foreach($gforumnames as $fid => $val) { $forumnames[$fid] = $val; } } $listcount = count($list); } elseif($viewtype == 'postcomment') { require_once libfile('function/post'); $pids = $tids = array(); $postcommentarr = C::t('forum_postcomment')->fetch_all_by_authorid($_G['uid'], $start, $perpage); foreach($postcommentarr as $value) { $pids[] = $value['pid']; $tids[] = $value['tid']; } $pids = C::t('forum_post')->fetch_all(0, $pids); $tids = C::t('forum_thread')->fetch_all($tids); $list = $fids = array(); foreach($postcommentarr as $value) { $value['authorid'] = $pids[$value['pid']]['authorid']; $value['fid'] = $pids[$value['pid']]['fid']; $value['invisible'] = $pids[$value['pid']]['invisible']; $value['dateline'] = $pids[$value['pid']]['dateline']; $value['message'] = $pids[$value['pid']]['message']; $value['special'] = $tids[$value['tid']]['special']; $value['status'] = $tids[$value['tid']]['status']; $value['subject'] = $tids[$value['tid']]['subject']; $value['digest'] = $tids[$value['tid']]['digest']; $value['attachment'] = $tids[$value['tid']]['attachment']; $value['replies'] = $tids[$value['tid']]['replies']; $value['views'] = $tids[$value['tid']]['views']; $value['lastposter'] = $tids[$value['tid']]['lastposter']; $value['lastpost'] = $tids[$value['tid']]['lastpost']; $value['icon'] = $tids[$value['tid']]['icon']; $value['tid'] = $pids[$value['pid']]['tid']; $fids[] = $value['fid']; $value['comment'] = messagecutstr($value['comment'], 100); $list[] = guide_procthread($value); } unset($pids, $tids, $postcommentarr); if($fids) { $fids = array_unique($fids); $forumnames = C::t('forum_forum')->fetch_all_name_by_fid($gids); } $listcount = count($list); } else { $invisible = null; if($filter == 'recyclebin') { $invisible = -5; } elseif($filter == 'aduit') { $invisible = -2; } elseif($filter == 'save' || $filter == 'ignored') { $invisible = -3; $displayorder = -4; } elseif($filter == 'close') { $closed = 1; } elseif($filter == 'common') { $invisible = 0; $displayorder = 0; $dglue = '>='; $closed = 0; } require_once libfile('function/post'); $posts = C::t('forum_post')->fetch_all_by_authorid(0, $_G['uid'], true, 'DESC', $start, $perpage, null, $invisible, $fid, $followfid); $listcount = count($posts); foreach($posts as $pid => $post) { $tids[$post['tid']][] = $pid; $post['message'] = !getstatus($post['status'], 2) || $post['authorid'] == $_G['uid'] ? messagecutstr($post['message'], 100) : ''; $posts[$pid] = $post; } if(!empty($tids)) { $threads = C::t('forum_thread')->fetch_all_by_tid_displayorder(array_keys($tids), $displayorder, $dglue, array(), $closed); foreach($threads as $tid => $thread) { if(!isset($_G['cache']['forums'][$thread['fid']])) { $gids[$thread['fid']] = $thread['fid']; } else { $forumnames[$thread[fid]] = array('fid' => $thread['fid'], 'name' => $_G['cache']['forums'][$thread[fid]]['name']); } $threads[$tid] = guide_procthread($thread); } if(!empty($gids)) { $groupforums = C::t('forum_forum')->fetch_all_name_by_fid($gids); foreach($groupforums as $fid => $val) { $forumnames[$fid] = $val; } } $list = array(); foreach($tids as $key => $val) { $list[$key] = $threads[$key]; } unset($threads); } } $multi = simplepage($listcount, $perpage, $_G['page'], $theurl); return array('forumnames' => $forumnames, 'threadcount' => $listcount, 'threadlist' => $list, 'multi' => $multi, 'tids' => $tids, 'posts' => $posts); } function guide_procthread($thread) { global $_G; $todaytime = strtotime(dgmdate(TIMESTAMP, 'Ymd')); $thread['lastposterenc'] = rawurlencode($thread['lastposter']); $thread['multipage'] = ''; $topicposts = $thread['special'] ? $thread['replies'] : $thread['replies'] + 1; if($topicposts > $_G['ppp']) { $pagelinks = ''; $thread['pages'] = ceil($topicposts / $_G['ppp']); for($i = 2; $i <= 6 && $i <= $thread['pages']; $i++) { $pagelinks .= "$i"; } if($thread['pages'] > 6) { $pagelinks .= "..$thread[pages]"; } $thread['multipage'] = ' ...'.$pagelinks; } if($thread['highlight']) { $string = sprintf('%02d', $thread['highlight']); $stylestr = sprintf('%03b', $string[0]); $thread['highlight'] = ' style="'; $thread['highlight'] .= $stylestr[0] ? 'font-weight: bold;' : ''; $thread['highlight'] .= $stylestr[1] ? 'font-style: italic;' : ''; $thread['highlight'] .= $stylestr[2] ? 'text-decoration: underline;' : ''; $thread['highlight'] .= $string[1] ? 'color: '.$_G['forum_colorarray'][$string[1]] : ''; $thread['highlight'] .= '"'; } else { $thread['highlight'] = ''; } $thread['recommendicon'] = ''; if(!empty($_G['setting']['recommendthread']['status']) && $thread['recommends']) { foreach($_G['setting']['recommendthread']['iconlevels'] as $k => $i) { if($thread['recommends'] > $i) { $thread['recommendicon'] = $k+1; break; } } } $thread['moved'] = $thread['heatlevel'] = $thread['new'] = 0; $thread['icontid'] = $thread['forumstick'] || !$thread['moved'] && $thread['isgroup'] != 1 ? $thread['tid'] : $thread['closed']; $thread['folder'] = 'common'; $thread['weeknew'] = TIMESTAMP - 604800 <= $thread['dbdateline']; if($thread['replies'] > $thread['views']) { $thread['views'] = $thread['replies']; } if($_G['setting']['heatthread']['iconlevels']) { foreach($_G['setting']['heatthread']['iconlevels'] as $k => $i) { if($thread['heats'] > $i) { $thread['heatlevel'] = $k + 1; break; } } } $thread['istoday'] = $thread['dateline'] > $todaytime ? 1 : 0; $thread['dbdateline'] = $thread['dateline']; $thread['dateline'] = dgmdate($thread['dateline'], 'u', '9999', getglobal('setting/dateformat')); $thread['dblastpost'] = $thread['lastpost']; $thread['lastpost'] = dgmdate($thread['lastpost'], 'u'); if(in_array($thread['displayorder'], array(1, 2, 3, 4))) { $thread['id'] = 'stickthread_'.$thread['tid']; } else { $thread['id'] = 'normalthread_'.$thread['tid']; } $thread['rushreply'] = getstatus($thread['status'], 3); return $thread; } function update_guide_rsscache($type, $perpage) { global $_G; $processname = 'guide_rss_cache'; if(discuz_process::islocked($processname, 600)) { return false; } C::t('forum_rsscache')->delete_by_guidetype($type); require_once libfile('function/post'); $data = get_guide_list($type, 0, $perpage); foreach($data['threadlist'] as $thread) { $thread['author'] = $thread['author'] != '' ? addslashes($thread['author']) : 'Anonymous'; $thread['subject'] = addslashes($thread['subject']); $post = C::t('forum_post')->fetch_threadpost_by_tid_invisible($thread['tid']); $attachdata = ''; if($post['attachment'] == 2) { $attach = C::t('forum_attachment_n')->fetch_max_image('tid:'.$thread['tid'], 'pid', $post['pid']); $attachdata = "\t".$attach['remote']."\t".$attach['attachment']."\t".$attach['filesize']; } $thread['message'] = $post['message']; $thread['status'] = $post['status']; $thread['description'] = $thread['readperm'] > 0 || $thread['price'] > 0 || $thread['status'] & 1 ? '' : addslashes(messagecutstr($thread['message'], 250 - strlen($attachdata)).$attachdata); C::t('forum_rsscache')->insert(array( 'lastupdate'=>$_G['timestamp'], 'fid'=>$thread['fid'], 'tid'=>$thread['tid'], 'dateline'=>$thread['dbdateline'], 'forum'=>strip_tags($data['forumnames'][$thread[fid]]['name']), 'author'=>$thread['author'], 'subject'=>$thread['subject'], 'description'=>$thread['description'], 'guidetype'=>$type ), false, true); } discuz_process::unlock($processname); return true; } ?>