function do_get_subscriptions() { global $vbulletin, $db, $show, $vbphrase, $permissions, $subscribecounters; $vbulletin->options['threadpreview'] = FR_PREVIEW_LEN; if (!$vbulletin->userinfo['userid']) { json_error(ERR_NO_PERMISSION); } if (!$vbulletin->userinfo['userid'] and $_REQUEST['do'] != 'removesubscription' or $vbulletin->userinfo['userid'] and !($permissions['forumpermissions'] & $vbulletin->bf_ugp_forumpermissions['canview']) or $vbulletin->userinfo['usergroupid'] == 4 or !($permissions['genericoptions'] & $vbulletin->bf_ugp_genericoptions['isnotbannedgroup'])) { json_error(ERR_NO_PERMISSION); } $thread_data = array(); $unread_subs = 0; // vbulletin expects folderid, but we will just get them all $vbulletin->input->clean_array_gpc('r', array('folderid' => TYPE_NOHTML, 'perpage' => TYPE_UINT, 'pagenumber' => TYPE_UINT, 'sortfield' => TYPE_NOHTML, 'sortorder' => TYPE_NOHTML, 'previewtype' => TYPE_INT)); $previewtype = $vbulletin->GPC['previewtype']; if (!$previewtype) { $previewtype = 1; } $vbulletin->GPC['folderid'] = 'all'; // Values that are reused in templates $sortfield =& $vbulletin->GPC['sortfield']; $perpage =& $vbulletin->GPC['perpage']; $pagenumber =& $vbulletin->GPC['pagenumber']; $folderid =& $vbulletin->GPC['folderid']; if ($folderid == 'all') { $getallfolders = true; $show['allfolders'] = true; } else { $folderid = intval($folderid); } $folderselect["{$folderid}"] = 'selected="selected"'; // Build folder jump require_once DIR . '/includes/functions_misc.php'; $folders = construct_folder_jump(1, $folderid, false, '', true); $templater = vB_Template::create('subscribe_folder_jump'); $templater->register('folders', $folders); $folderjump = $templater->render(); // look at sorting options: if ($vbulletin->GPC['sortorder'] != 'asc') { $vbulletin->GPC['sortorder'] = 'desc'; $sqlsortorder = 'DESC'; $order = array('desc' => 'selected="selected"'); } else { $sqlsortorder = ''; $order = array('asc' => 'selected="selected"'); } switch ($sortfield) { case 'title': case 'lastpost': case 'replycount': case 'views': case 'postusername': $sqlsortfield = 'thread.' . $sortfield; break; default: $handled = false; if (!$handled) { $sqlsortfield = 'thread.lastpost'; $sortfield = 'lastpost'; } } $sort = array($sortfield => 'selected="selected"'); if ($getallfolders) { $totalallthreads = array_sum($subscribecounters); } else { $totalallthreads = $subscribecounters["{$folderid}"]; } // set defaults sanitize_pageresults($totalallthreads, $pagenumber, $perpage, 200, $vbulletin->options['maxthreads']); // display threads $limitlower = ($pagenumber - 1) * $perpage + 1; $limitupper = $pagenumber * $perpage; if ($limitupper > $totalallthreads) { $limitupper = $totalallthreads; if ($limitlower > $totalallthreads) { $limitlower = $totalallthreads - $perpage; } } if ($limitlower <= 0) { $limitlower = 1; } $hook_query_fields = $hook_query_joins = $hook_query_where = ''; $getthreads = $db->query_read_slave("\n\t\tSELECT thread.threadid, emailupdate, subscribethreadid, thread.forumid, thread.postuserid\n\t\t\t{$hook_query_fields}\n\t\tFROM " . TABLE_PREFIX . "subscribethread AS subscribethread\n\t\tLEFT JOIN " . TABLE_PREFIX . "thread AS thread ON(thread.threadid = subscribethread.threadid)\n\t\t{$hook_query_joins}\n\t\tWHERE subscribethread.userid = " . $vbulletin->userinfo['userid'] . "\n\t\t\tAND thread.visible = 1\n\t\t\tAND canview = 1\n\t\t" . iif(!$getallfolders, "\tAND folderid = {$folderid}") . "\n\t\t\t{$hook_query_where}\n\t\tORDER BY {$sqlsortfield} {$sqlsortorder}\n\t\tLIMIT " . ($limitlower - 1) . ", {$perpage}\n\t"); if ($totalthreads = $db->num_rows($getthreads)) { $forumids = array(); $threadids = array(); $emailupdate = array(); $killthreads = array(); while ($getthread = $db->fetch_array($getthreads)) { $forumperms = fetch_permissions($getthread['forumid']); if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) or !($forumperms & $vbulletin->bf_ugp_forumpermissions['canviewthreads']) or $getthread['postuserid'] != $vbulletin->userinfo['userid'] and !($forumperms & $vbulletin->bf_ugp_forumpermissions['canviewothers'])) { $killthreads["{$getthread['subscribethreadid']}"] = $getthread['subscribethreadid']; $totalallthreads--; continue; } $forumids["{$getthread['forumid']}"] = true; $threadids[] = $getthread['threadid']; $emailupdate["{$getthread['threadid']}"] = $getthread['emailupdate']; $subscribethread["{$getthread['threadid']}"] = $getthread['subscribethreadid']; } $threadids = implode(',', $threadids); } unset($getthread); $db->free_result($getthreads); if (!empty($killthreads)) { // Update thread subscriptions $vbulletin->db->query_write("\n\t\t\tUPDATE " . TABLE_PREFIX . "subscribethread\n\t\t\tSET canview = 0\n\t\t\tWHERE subscribethreadid IN (" . implode(', ', $killthreads) . ")\n\t\t"); } if (!empty($threadids)) { cache_ordered_forums(1); $colspan = 5; $show['threadicons'] = false; // get last read info for each thread $lastread = array(); foreach (array_keys($forumids) as $forumid) { if ($vbulletin->options['threadmarking']) { $lastread["{$forumid}"] = max($vbulletin->forumcache["{$forumid}"]['forumread'], TIMENOW - $vbulletin->options['markinglimit'] * 86400); } else { $lastread["{$forumid}"] = max(intval(fetch_bbarray_cookie('forum_view', $forumid)), $vbulletin->userinfo['lastvisit']); } if ($vbulletin->forumcache["{$forumid}"]['options'] & $vbulletin->bf_misc_forumoptions['allowicons']) { $show['threadicons'] = true; $colspan = 6; } } if ($previewtype == 1) { $previewfield = "post.pagetext AS preview, post.username AS lastpost_username, post.userid AS lastpost_userid,"; $previewjoin = "LEFT JOIN " . TABLE_PREFIX . "post AS post ON(post.postid = thread.firstpostid)"; } else { $previewfield = "post.pagetext AS preview, post.username AS lastpost_username, post.userid AS lastpost_userid,"; $previewjoin = "LEFT JOIN " . TABLE_PREFIX . "post AS post ON(post.postid = thread.lastpostid)"; } $hasthreads = true; $threadbits = ''; $pagenav = ''; $counter = 0; $toread = 0; $vbulletin->options['showvotes'] = intval($vbulletin->options['showvotes']); if ($vbulletin->userinfo['userid'] and in_coventry($vbulletin->userinfo['userid'], true)) { $lastpost_info = "IF(tachythreadpost.userid IS NULL, thread.lastpost, tachythreadpost.lastpost) AS lastpost, " . "IF(tachythreadpost.userid IS NULL, thread.lastposter, tachythreadpost.lastposter) AS lastposter, " . "IF(tachythreadpost.userid IS NULL, thread.lastposterid, tachythreadpost.lastposterid) AS lastposterid, " . "IF(tachythreadpost.userid IS NULL, thread.lastpostid, tachythreadpost.lastpostid) AS lastpostid"; $tachyjoin = "LEFT JOIN " . TABLE_PREFIX . "tachythreadpost AS tachythreadpost ON " . "(tachythreadpost.threadid = thread.threadid AND tachythreadpost.userid = " . $vbulletin->userinfo['userid'] . ')'; } else { $lastpost_info = 'thread.lastpost, thread.lastposter, thread.lastposterid, thread.lastpostid'; $tachyjoin = ''; } $hook_query_fields = $hook_query_joins = $hook_query_where = ''; $threads = $db->query_read_slave("\n\t\t\tSELECT\n\t\t\t\tIF(thread.votenum >= " . $vbulletin->options['showvotes'] . ", thread.votenum, 0) AS votenum,\n\t\t\t\tIF(thread.votenum >= " . $vbulletin->options['showvotes'] . " AND thread.votenum > 0, thread.votetotal / thread.votenum, 0) AS voteavg,\n\t\t\t\tthread.votetotal,\n\t\t\t\t{$previewfield} thread.threadid, thread.title AS threadtitle, thread.forumid, thread.pollid,\n\t\t\t\tthread.open, thread.replycount, thread.postusername, thread.prefixid,\n\t\t\t\t{$lastpost_info}, thread.postuserid, thread.dateline, thread.views, thread.iconid AS threadiconid,\n\t\t\t\tthread.notes, thread.visible, thread.attach, thread.taglist\n\t\t\t\t" . ($vbulletin->options['threadmarking'] ? ", threadread.readtime AS threadread" : '') . "\n\t\t\t\t{$hook_query_fields}\n\t\t\tFROM " . TABLE_PREFIX . "thread AS thread\n\t\t\t{$previewjoin}\n\t\t\t" . ($vbulletin->options['threadmarking'] ? " LEFT JOIN " . TABLE_PREFIX . "threadread AS threadread ON (threadread.threadid = thread.threadid AND threadread.userid = " . $vbulletin->userinfo['userid'] . ")" : '') . "\n\t\t\t{$tachyjoin}\n\t\t\t{$hook_query_joins}\n\t\t\tWHERE thread.threadid IN ({$threadids})\n\t\t\tORDER BY {$sqlsortfield} {$sqlsortorder}\n\t\t"); unset($sqlsortfield, $sqlsortorder); require_once DIR . '/includes/functions_forumdisplay.php'; // Get Dot Threads $dotthreads = fetch_dot_threads_array($threadids); if ($vbulletin->options['showdots'] and $vbulletin->userinfo['userid']) { $show['dotthreads'] = true; } else { $show['dotthreads'] = false; } if ($vbulletin->options['threadpreview'] and $vbulletin->userinfo['ignorelist']) { // Get Buddy List $buddy = array(); if (trim($vbulletin->userinfo['buddylist'])) { $buddylist = preg_split('/( )+/', trim($vbulletin->userinfo['buddylist']), -1, PREG_SPLIT_NO_EMPTY); foreach ($buddylist as $buddyuserid) { $buddy["{$buddyuserid}"] = 1; } } DEVDEBUG('buddies: ' . implode(', ', array_keys($buddy))); // Get Ignore Users $ignore = array(); if (trim($vbulletin->userinfo['ignorelist'])) { $ignorelist = preg_split('/( )+/', trim($vbulletin->userinfo['ignorelist']), -1, PREG_SPLIT_NO_EMPTY); foreach ($ignorelist as $ignoreuserid) { if (!$buddy["{$ignoreuserid}"]) { $ignore["{$ignoreuserid}"] = 1; } } } DEVDEBUG('ignored users: ' . implode(', ', array_keys($ignore))); } $foruminfo['allowratings'] = true; $show['notificationtype'] = true; $show['threadratings'] = true; $show['threadrating'] = true; while ($thread = $db->fetch_array($threads)) { $threadid = $thread['threadid']; // build thread data $thread = process_thread_array($thread, $lastread["{$thread['forumid']}"]); switch ($emailupdate["{$thread['threadid']}"]) { case 0: $thread['notification'] = $vbphrase['none']; break; case 1: $thread['notification'] = $vbphrase['instant']; break; case 2: $thread['notification'] = $vbphrase['daily']; break; case 3: $thread['notification'] = $vbphrase['weekly']; break; default: $thread['notification'] = $vbphrase['n_a']; } $avatarurl = ''; if ($thread['lastpost_userid'] > 0) { $userinfoavatar = fetch_userinfo($thread['lastpost_userid'], FETCH_USERINFO_AVATAR); fetch_avatar_from_userinfo($userinfoavatar, true, false); if ($userinfoavatar['avatarurl'] != '') { $avatarurl = process_avatarurl($userinfoavatar['avatarurl']); } unset($userinfoavatar); } $tmp = array('thread_id' => $thread['threadid'], 'new_posts' => $show['gotonewpost'] ? true : false, 'forum_id' => $thread['forumid'], 'total_posts' => $thread['totalposts'] ? $thread['totalposts'] : 0, 'forum_title' => prepare_utf8_string($thread['forumtitle']), 'thread_title' => prepare_utf8_string($thread['threadtitle']), 'thread_preview' => prepare_utf8_string(preview_chop(html_entity_decode($thread['preview']), FR_PREVIEW_LEN)), 'post_userid' => $thread['lastpost_userid'], 'post_lastposttime' => prepare_utf8_string(date_trunc($thread['lastpostdate']) . ' ' . $thread['lastposttime']), 'post_username' => prepare_utf8_string(strip_tags($thread['lastpost_username']))); if ($avatarurl != '') { $tmp['avatarurl'] = $avatarurl; } if ($thread['attach']) { $tmp['attach'] = true; } if ($thread['pollid']) { $tmp['poll'] = true; } $thread_data[] = $tmp; } $db->free_result($threads); unset($threadids); } else { $totalallthreads = 0; } $out = array('threads' => $thread_data, 'total_threads' => $totalallthreads); return $out; }
eval('$searchbits .= "' . fetch_template('search_results_postbit') . '";'); } if ($show['popups'] and $show['inlinemod']) { eval('$threadadmin_imod_menu = "' . fetch_template('threadadmin_imod_menu_post') . '";'); } } else { $show['forumlink'] = true; // threadbit_deleted conditionals $show['threadtitle'] = true; $show['viewthread'] = true; $show['managethread'] = true; foreach ($itemids as $thread) { // add highlight words $thread['highlight'] =& $highlightwords; // get info from thread $thread = process_thread_array($thread, $lastread["{$thread['forumid']}"]); // Inline Moderation $show['disabled'] = ($movethread["{$thread['threadid']}"] or $deletethread["{$thread['threadid']}"] or $approvethread["{$thread['threadid']}"] or $openthread["{$thread['threadid']}"]) ? false : true; $itemcount++; exec_switch_bg(); ($hook = vBulletinHook::fetch_hook('search_results_threadbit')) ? eval($hook) : false; if (($display['options']['action'] == 'getdaily' or $display['options']['action'] == 'getnew') and $search['sortby'] == 'lastpost' and !$oldposts and $thread['lastpost'] <= $vbulletin->userinfo['lastvisit'] and $vbulletin->userinfo['lastvisit'] != 0) { $oldposts = true; if ($display['options']['action'] == 'getnew') { $show['unread_posts'] = true; } eval('$searchbits .= "' . fetch_template('threadbit_lastvisit') . '";'); } $forumperms = fetch_permissions($thread['forumid']); if ($thread['visible'] == 2) { $thread['deletedcount']++;
$post['posticonpath'] = ''; $post['posticontitle'] = ''; } $post['pagetext'] = preg_replace('#\\[quote(=("|"|\'|)??.*\\2)?\\](((?>[^\\[]*?|(?R)|.))*)\\[/quote\\]#siU', '', $post['pagetext']); // get first 200 chars of page text $post['pagetext'] = htmlspecialchars_uni(fetch_censored_text(trim(fetch_trimmed_title(strip_bbcode($post['pagetext'], 1), 200)))); // get post title if ($post['posttitle'] == '') { $post['posttitle'] = fetch_trimmed_title($post['pagetext'], 50); } else { $post['posttitle'] = fetch_censored_text($post['posttitle']); } // format post text $post['pagetext'] = nl2br($post['pagetext']); // get info from post $post = process_thread_array($post, $lastread["{$post['forumid']}"], $post['allowicons']); $show['managepost'] = (can_moderate($post['forumid'], 'candeleteposts') or can_moderate($post['forumid'], 'canremoveposts')) ? true : false; $show['approvepost'] = can_moderate($post['forumid'], 'canmoderateposts') ? true : false; $show['managethread'] = can_moderate($post['forumid'], 'canmanagethreads') ? true : false; $show['disabled'] = ($show['managethread'] or $show['managepost'] or $show['approvepost']) ? false : true; $show['moderated'] = (!$post['visible'] or !$post['thread_visible'] and $post['postid'] == $post['firstpostid']) ? true : false; if ($post['pdel_userid']) { $post['del_username'] =& $post['pdel_username']; $post['del_userid'] =& $post['pdel_userid']; $post['del_reason'] = fetch_censored_text($post['pdel_reason']); $show['deleted'] = true; } else { if ($post['tdel_userid']) { $post['del_username'] =& $post['tdel_username']; $post['del_userid'] =& $post['tdel_userid']; $post['del_reason'] = fetch_censored_text($post['tdel_reason']);
} DEVDEBUG('ignored users: ' . implode(', ', array_keys($ignore))); } $show['threads'] = true; $threadbits = ''; $threadbits_sticky = ''; $counter = 0; $toread = 0; while ($thread = $db->fetch_array($threads)) { // AND $counter++ < $perpage) // build thread data $thread = process_thread_array($thread, $lastread, $foruminfo['allowicons']); $realthreadid = $thread['realthreadid']; if ($thread['sticky']) { $threadbit =& $threadbits_sticky; } else { $threadbit =& $threadbits; } ($hook = vBulletinHook::fetch_hook('threadbit_display')) ? eval($hook) : false; // Soft Deleted Thread if ($thread['visible'] == 2)
public function get_post_template_array($current_user, $summary_length, $highlight = "") { global $vbphrase, $show; require_once DIR . '/includes/functions_forumdisplay.php'; /* Post is not a good name for this array, however its what it used to be called (when it wasn't such a bad name) and changing it makes it certain that a lot of hooks are going to break. */ $post = array(); $thread = $this->get_thread(); $forum = $thread->get_forum(); if ($this->is_post_new($current_user)) { $post['post_statusicon'] = 'new'; $post['post_statustitle'] = $vbphrase['unread']; } else { $post['post_statusicon'] = 'old'; $post['post_statustitle'] = $vbphrase['old']; } $post['postid'] = $this->get_field('postid'); $post['userid'] = $this->get_field('userid'); $post['postdateline'] = $this->get_field('dateline'); $post['posttitle'] = $this->get_display_title(); $post['pagetext'] = nl2br($this->get_summary($summary_length)); $post['visible'] = $this->get_field('visible'); $post['attach'] = $this->get_field('attach'); $post['highlight'] = $highlight; $post['username'] = $this->get_field('userid') == 0 ? $this->get_field('username') : $this->get_user()->get_field('username'); $post['threadid'] = $thread->get_field('threadid'); $post['threadtitle'] = $thread->get_field('title'); $post['threadiconid'] = $thread->get_field('iconid'); $post['replycount'] = $thread->get_field('replycount'); $post['views'] = $thread->get_field('views') > 0 ? $thread->get_field('views') : $thread->get_field('replycount') + 1; $post['firstpostid'] = $thread->get_field('firstpostid'); $post['prefixid'] = $thread->get_field('prefixid'); $post['taglist'] = $thread->get_field('taglist'); $post['pollid'] = $thread->get_field('pollid'); $post['sticky'] = $thread->get_field('sticky'); $post['open'] = $thread->get_field('open'); $post['lastpost'] = $thread->get_field('lastpost'); $post['forumid'] = $thread->get_field('forumid'); $post['thread_visible'] = $thread->get_field('visible'); $post['forumtitle'] = $forum->get_field('title'); $post['posticonid'] = $this->get_field('iconid'); $post['allowicons'] = $forum->allow_icons(); $post['posticonpath'] = $this->get_icon_path(); $post['posticontitle'] = $this->get_icon_title(); $post['posticon'] = $post['allowicons'] and $post['posticonpath']; $lastread = $forum->get_last_read_by_current_user($current_user); $show['deleted'] = false; if ($current_user->isModerator()) { $log = $this->get_deletion_log_array(); if ($log['userid']) { $post['del_phrase'] = $vbphrase['message_deleted_by_x']; } else { $log = $thread->get_deletion_log_array(); if (!$log['userid']) { $post['del_phrase'] = $vbphrase['thread_deleted_by_x']; $log = false; } } if ($log) { $post['del_username'] = $log['username']; $post['del_userid'] = $log['userid']; $post['del_reason'] = $log['reason']; $show['deleted'] = true; } } $post['prefixid'] = $thread->get_field('prefixid'); if ($post['prefixid']) { $post['prefix_plain_html'] = htmlspecialchars_uni($vbphrase["prefix_{$post['prefixid']}_title_plain"]); $post['prefix_rich'] = $vbphrase["prefix_{$post['prefixid']}_title_rich"]; } else { $post['prefix_plain_html'] = ''; $post['prefix_rich'] = ''; } $show['disabled'] = !$this->can_inline_mod($current_user); $post = process_thread_array($post, $lastread, $post['allowicons']); return $post; }
function do_showresults($searchid, $pagenumber = 1, $perpage = 25) { global $vbulletin, $db, $show, $vbphrase, $current_user, $show; $vbulletin->options['threadpreview'] = FR_PREVIEW_LEN; $vbulletin->input->clean_array_gpc('r', array('previewtype' => TYPE_INT)); $previewtype = $vbulletin->GPC['previewtype']; if (!$previewtype) { $previewtype = 1; } $bbcode_parser = new vB_BbCodeParser($vbulletin, fetch_tag_list()); // Get exclude IDs $exclude_ids = @explode(',', $vbulletin->options['forumrunner_exclude']); if (in_array('-1', $exclude_ids)) { $exclude_ids = array(); } if ($results = vB_Search_Results::create_from_searchid($current_user, $searchid)) { $pages = $results->get_page($pagenumber, $perpage, 10000); } else { $pages = array(); } if (count($pages) == 0) { $threads[]['error'] = strip_tags(fetch_error('searchnoresults', '')); return array('threads' => $threads, 'total_threads' => count($threads)); } $thread_data = array(); $skipped = 0; foreach ($pages as $item) { switch (get_class($item)) { case 'vBForum_Search_Result_Thread': $thread = $item->get_thread(); $foruminfo = fetch_foruminfo($thread->get_field('forumid')); $parentlist = explode(',', substr($foruminfo['parentlist'], 0, -3)); $skip = false; foreach ($parentlist as $parent_id) { if (in_array($parent_id, $exclude_ids)) { $skip = true; } } if ($thread->get_field('visible') == 2) { $skip = true; } if ($skip) { $skipped++; continue; } $lastread = $thread->get_forum()->get_last_read_by_current_user($current_user); $legacy_thread = process_thread_array($thread->get_record(), $lastread); $date = vbdate($vbulletin->options['dateformat'], $thread->get_field('lastpost')); $time = vbdate($vbulletin->options['timeformat'], $thread->get_field('lastpost')); $previewinfo = $db->query_first_slave("\n\t\tSELECT *\n\t\tFROM " . TABLE_PREFIX . "post\n\t\tWHERE postid = " . $thread->get_field($previewtype == 1 ? 'firstpostid' : 'lastpostid') . "\n\t "); $preview = ''; if (method_exists($bbcode_parser, 'get_preview')) { $preview = $bbcode_parser->get_preview(fetch_censored_text($previewinfo['pagetext']), 200); } else { // vB4 prior to vB4.0.4 did not have get_preview() list($text, $nuked_quotes, $images) = parse_post($previewinfo['pagetext'], true, array()); $preview = preview_chop(fetch_censored_text($nuked_quotes), 200); } $avatarurl = ''; if ($previewinfo['userid'] > 0) { $userinfoavatar = fetch_userinfo($previewinfo['userid'], FETCH_USERINFO_AVATAR); fetch_avatar_from_userinfo($userinfoavatar, true, false); if ($userinfoavatar['avatarurl'] != '') { $avatarurl = process_avatarurl($userinfoavatar['avatarurl']); } unset($userinfoavatar); } $tmp = array('thread_id' => $thread->get_field('threadid'), 'new_posts' => $show['gotonewpost'], 'forum_id' => $thread->get_field('forumid'), 'total_posts' => $thread->get_field('replycount'), 'forum_title' => prepare_utf8_string(strip_tags($foruminfo['title'])), 'thread_title' => prepare_utf8_string(strip_tags($thread->get_field('title'))), 'thread_preview' => prepare_utf8_string(preview_chop(strip_tags(strip_bbcode(html_entity_decode($preview))), FR_PREVIEW_LEN)), 'post_userid' => $previewinfo['userid'], 'post_lastposttime' => prepare_utf8_string(date_trunc($date) . ' ' . $time), 'post_username' => prepare_utf8_string(strip_tags($previewinfo['username']))); if ($avatarurl != '') { $tmp['avatarurl'] = $avatarurl; } if ($thread->get_field('prefixid')) { $prefixid = $thread->get_field('prefixid'); $tmp['prefix'] = prepare_utf8_string(strip_tags($vbphrase["prefix_{$prefixid}_title_plain"])); } if ($thread->get_field('attach')) { $tmp['attach'] = true; } if ($thread->get_field('pollid')) { $tmp['poll'] = true; } $thread_data[] = $tmp; break; case 'vBForum_Search_Result_Post': $post = $item->get_post(); $thread = $post->get_thread(); $foruminfo = fetch_foruminfo($thread->get_field('forumid')); $parentlist = explode(',', substr($foruminfo['parentlist'], 0, -3)); $skip = false; foreach ($parentlist as $parent_id) { if (in_array($parent_id, $exclude_ids)) { $skip = true; } } if ($post->get_field('visible') == 2) { $skip = true; } if ($skip) { $skipped++; continue; } $date = vbdate($vbulletin->options['dateformat'], $post->get_field('dateline')); $time = vbdate($vbulletin->options['timeformat'], $post->get_field('dateline')); $avatarurl = ''; if ($post->get_field('userid') > 0) { $userinfoavatar = fetch_userinfo($post->get_field('userid'), FETCH_USERINFO_AVATAR); fetch_avatar_from_userinfo($userinfoavatar, true, false); if ($userinfoavatar['avatarurl'] != '') { $avatarurl = process_avatarurl($userinfoavatar['avatarurl']); } unset($userinfoavatar); } $tmp = array('thread_id' => $post->get_field('threadid'), 'post_id' => $post->get_field('postid'), 'jump_to_post' => 1, 'forum_id' => $thread->get_field('forumid'), 'forum_title' => prepare_utf8_string(strip_tags($foruminfo['title'])), 'thread_title' => prepare_utf8_string(strip_tags($thread->get_field('title'))), 'thread_preview' => prepare_utf8_string(preview_chop(htmlspecialchars_uni(fetch_censored_text(strip_bbcode(strip_quotes(html_entity_decode($post->get_field('pagetext'))), false, true))), FR_PREVIEW_LEN)), 'post_userid' => $post->get_field('userid'), 'post_lastposttime' => prepare_utf8_string(date_trunc($date) . ' ' . $time), 'post_username' => prepare_utf8_string(strip_tags($post->get_field('username')))); if ($avatarurl != '') { $tmp['avatarurl'] = $avatarurl; } if ($thread->get_field('prefixid')) { $prefixid = $thread->get_field('prefixid'); $tmp['prefix'] = prepare_utf8_string(strip_tags($vbphrase["prefix_{$prefixid}_title_plain"])); } if ($post->get_field('attach')) { $tmp['attach'] = true; } $thread_data[] = $tmp; break; } } $out = array(); if (is_array($thread_data) && count($thread_data) > 0) { $out['threads'] = $thread_data; $out['total_threads'] = max($results->get_confirmed_count() - $skipped, 0); } else { $out['threads'] = array(); $out['total_threads'] = 0; } $out['searchid'] = $searchid; return $out; }
/** * Populates a view with the expected info from a content item. * * @param vB_View $view * @param int $viewtype */ protected function populateViewContent(vB_View $view, $viewtype = self::VIEW_PAGE) { parent::populateViewContent($view, $viewtype); $view->node = $this->content->getNodeId(); $view->type = new vB_Phrase('global', 'content'); if (vB::$vbulletin->userinfo['userid']) { $view->published = $this->content->isPublished(); } else { $view->published = true; } $view->page_url = $this->getPageUrl(); //Let's pass an url for editing. $view->edit_url = $this->getEditUrl(); if ($date = $this->content->getPublishDate()) { $view->publishdate = $date; } $view->publish_phrase = new vB_Phrase('vbcms', 'page_not_published'); // Get comments if ((self::VIEW_PAGE == $viewtype) AND (vB::$vbulletin->options['vbcmsforumid'] > 0) AND $this->content->isPublished() AND !$this->isSection()) { try { $thread = $this->getAssociatedThread(); $view->show_comments = ($thread AND $thread->can_view(new vB_Legacy_CurrentUser())); if ($view->show_comments) { $postids = $this->getCommentPosts($thread); require_once DIR . '/includes/functions_forumdisplay.php' ; $view->thread = process_thread_array($thread->get_record()); } } catch (Exception $e) { if (vB::$vbulletin->config['debug']) { throw ($e); } } } // Check if the user has voted $check = true; if (vB::$vbulletin->userinfo['userid']) { $row = vB::$db->query_first("SELECT vote FROM " . TABLE_PREFIX . "cms_rate WHERE userid = " . vB::$vbulletin->userinfo['userid'] . " AND nodeid = " . $view->node); if ($row[0]) { $check = false; } } $rated = intval(fetch_bbarray_cookie('cms_rate', $view->node)); // voted already if ($row[0] OR $rated) { $rate_index = $rated; if ($row[0]) { $rate_index = $row[0]; } $view->voteselected["$rate_index"] = 'selected="selected"'; $view->votechecked["$rate_index"] = 'checked="checked"'; } else { $view->voteselected[0] = 'selected="selected"'; $view->votechecked[0] = 'checked="checked"'; } $view->showratenode = ( ( $check OR (!$rated AND !vB::$vbulletin->userinfo['userid']) ) OR vB::$vbulletin->options['votechange'] ); // Get ratings if ($this->content->getRatingNum() >= vB::$vbulletin->options['showvotes']) { $view->ratingtotal = $this->content->getRatingTotal(); $view->ratingnum = $this->content->getRatingNum(); $view->ratingavg = vb_number_format($view->ratingtotal / $view->ratingnum, 2); $view->rating = intval(round($view->ratingtotal / $view->ratingnum)); $view->showrating = true; } else { $view->showrating = false; } vB_Cache::instance()->event(vBCms_NavBar::getCacheEventId($this->content->getNodeId())); }
if (!$buddy["{$ignoreuserid}"]) { $ignore["{$ignoreuserid}"] = 1; } } } DEVDEBUG('ignored users: ' . implode(', ', array_keys($ignore))); } $show['threads'] = true; $threadbits = ''; $threadbits_sticky = ''; $counter = 0; $toread = 0; while ($thread = $db->fetch_array($threads)) { // AND $counter++ < $perpage) // build thread data $thread = process_thread_array($thread, $lastread, $foruminfo['allowicons'], $fetchavatar); $realthreadid = $thread['realthreadid']; if ($thread['sticky']) { $threadbit =& $threadbits_sticky; } else { $threadbit =& $threadbits; } ($hook = vBulletinHook::fetch_hook('threadbit_display')) ? eval($hook) : false; // Soft Deleted Thread if ($thread['visible'] == 2) { $thread['deletedcount']++; $show['threadtitle'] = (can_moderate($forumid) or $vbulletin->userinfo['userid'] != 0 and $vbulletin->userinfo['userid'] == $thread['postuserid']) ? true : false; $show['deletereason'] = !empty($thread['del_reason']) ? true : false; $show['viewthread'] = can_moderate($forumid) ? true : false; $show['managethread'] = (can_moderate($forumid, 'candeleteposts') or can_moderate($forumid, 'canremoveposts')) ? true : false; $show['moderated'] = ($thread['hiddencount'] > 0 and can_moderate($forumid, 'canmoderateposts')) ? true : false;
public function render($current_user, $criteria, $template_name = '') { require_once(DIR . '/includes/functions_forumdisplay.php'); require_once(DIR . '/includes/functions_user.php'); global $vbulletin; global $show; if (!strlen($template_name)) { $template_name = 'search_threadbit'; } $show['forumlink'] = true; // threadbit_deleted conditionals $show['threadtitle'] = true; $show['viewthread'] = true; $show['managethread'] = true; //thread isn't a great name for this, but it stays consistant with //previous use and what will be expected in the hook. $thread = $this->thread->get_record(); $this->set_replydata($thread['threadid'], $current_user); // get info from thread $thread['postid'] = $thread['threadid']; $thread['threadtitle'] = $thread['title']; $thread['threadiconid'] = $thread['iconid']; $thread['postdateline'] = $thread['lastpost']; $thread['threadtitle'] = $thread['title']; $thread['issubscribed'] = $this->thread->is_subscribed($current_user); $thread['threadread'] = $this->thread->get_lastread($current_user); /* This used to be precalculated by forum, but it doesn't look expensive enough to want to bother with that. If that turns out to be wrong we'll need to do some kind of caching. */ $forum = $this->thread->get_forum(); if (!$current_user->hasForumPermission($forum->get_field('forumid'), 'canviewthreads')) { unset($thread['preview']); } //set the correct status if ($this->replydata['mylastpost'] > 0) { $post_statusicon[] = 'dot'; } if (!$thread['open']) { $post_statusicon[] = 'lock'; } if ($this->replydata['lastread'] < $thread['lastpost']) { $post_statusicon[] = 'new'; } if (! count($post_statusicon)) { $post_statusicon[] = 'old'; } $post_statusicon = implode('_', $post_statusicon); $show['deletereason'] = false; if ($thread['visible'] == 2) { $log = $this->thread->get_deletion_log_array(); $thread['del_username'] = $log['username']; $thread['del_userid'] = $log['userid']; $thread['del_reason'] = $log['reason']; $thread['deletedcount']++; $show['deletereason'] = !empty($thread['del_reason']); } else if ($thread['visible'] == 0) { $thread['hiddencount']++; } $thread['highlight'] = $criteria->get_highlights(); $show['moderated'] = ($thread['hiddencount'] > 0 AND $current_user->canModerateForum($thread['forumid'], 'canmoderateposts')); $show['deletedthread'] = ($thread['deletedcount'] > 0 AND ($current_user->canModerateForum($thread['forumid']) OR $current_user->hasForumPermission($thread['forumid'], 'canseedelnotice'))); $show['disabled'] = !$this->can_inline_mod($current_user); $lastread = $forum->get_last_read_by_current_user($current_user); $thread = process_thread_array($thread, $lastread); ($hook = vBulletinHook::fetch_hook('search_results_threadbit')) ? eval($hook) : false; $pageinfo = $pageinfo_lastpost = $pageinfo_firstpost = $pageinfo_lastpage = array(); if ($show['pagenavmore']) { $pageinfo_lastpage['page'] = $thread['totalpages']; } $pageinfo_lastpost['p'] = $thread['lastpostid']; $pageinfo_newpost['goto'] = 'newpost'; $pageinfo_thread = array(); if (!empty($thread['highlight'])) { $pageinfo_thread['highlight'] = urlencode(implode(' ', $thread['highlight'])); $pageinfo_newpost['highlight'] = urlencode(implode(' ', $thread['highlight'])); $pageinfo_lastpost['highlight'] = urlencode(implode(' ', $thread['highlight'])); $pageinfo_firstpost['highlight'] = urlencode(implode(' ', $thread['highlight'])); } if ($vbulletin->options['avatarenabled']) { $thread['lastpost_avatar'] = fetch_avatar_url($thread['lastposterid']); $thread['post_avatar'] = fetch_avatar_url($thread['postuserid']); } if ($vbulletin->options['avatarenabled']) { $thread['lastpost_avatar'] = fetch_avatar_url($thread['lastposterid']); $thread['post_avatar'] = fetch_avatar_url($thread['postuserid']); } $template = vB_Template::create($template_name); $template->register('post_statusicon', $post_statusicon); $template->register('pageinfo_firstpost', $pageinfo_firstpost); $template->register('pageinfo_lastpost', $pageinfo_lastpost); $template->register('pageinfo_lastpage', $pageinfo_lastpage); $template->register('pageinfo_newpost', $pageinfo_newpost); $template->register('pageinfo', $pageinfo_thread); $template->register('dateformat', $vbulletin->options['dateformat']); $template->register('timeformat', $vbulletin->options['default_timeformat']); $template->register('postdateline', $thread['lastpost']); $userinfo = array('userid' => $thread['postuserid'], 'username' => $thread['postusername'] ); $template->register('userinfo', $userinfo); $template->register('show', $show); $template->register('thread', $thread); return $template->render(); }
function do_get_forum() { global $vbulletin, $db, $show, $vbphrase, $foruminfo; $canpost = true; $vbulletin->input->clean_array_gpc('r', array('fid' => TYPE_INT, 'previewtype' => TYPE_INT)); $previewtype = $vbulletin->GPC['previewtype']; if (!$previewtype) { $previewtype = 1; } if (empty($foruminfo['forumid'])) { $forumid = -1; } else { $vbulletin->input->clean_array_gpc('r', array('password' => TYPE_STR)); // Check the forum password if ($vbulletin->GPC['password'] && $foruminfo['password'] == $vbulletin->GPC['password']) { // Set a temp cookie for guests if (!$vbulletin->userinfo['userid']) { set_bbarray_cookie('forumpwd', $foruminfo['forumid'], md5($vbulletin->userinfo['userid'] . $vbulletin->GPC['password'])); } else { set_bbarray_cookie('forumpwd', $foruminfo['forumid'], md5($vbulletin->userinfo['userid'] . $vbulletin->GPC['password']), 1); } } $perpage = $vbulletin->input->clean_gpc('r', 'perpage', TYPE_UINT); $pagenumber = $vbulletin->input->clean_gpc('r', 'pagenumber', TYPE_UINT); $daysprune = $vbulletin->input->clean_gpc('r', 'daysprune', TYPE_INT); $sortfield = $vbulletin->input->clean_gpc('r', 'sortfield', TYPE_STR); // get permission to view forum $_permsgetter_ = 'forumdisplay'; $forumperms = fetch_permissions($foruminfo['forumid']); if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview'])) { json_error(ERR_NO_PERMISSION); } // Check for forum password! if (!verify_forum_password($foruminfo['forumid'], $foruminfo['password'], false)) { json_error(ERR_NEED_PASSWORD, RV_NEED_FORUM_PASSWORD); } // Can we post in this forum? if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canpostnew'])) { $canpost = false; } $forumid = $foruminfo['forumid']; } // Can forum contain threads? $announcements_out = array(); // These $_REQUEST values will get used in the sort template so they are assigned to normal variables $perpage = $vbulletin->input->clean_gpc('r', 'perpage', TYPE_UINT); $pagenumber = $vbulletin->input->clean_gpc('r', 'pagenumber', TYPE_UINT); $daysprune = $vbulletin->input->clean_gpc('r', 'daysprune', TYPE_INT); $sortfield = $vbulletin->input->clean_gpc('r', 'sortfield', TYPE_STR); // get permission to view forum $_permsgetter_ = 'forumdisplay'; $forumperms = fetch_permissions($foruminfo['forumid']); if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview'])) { json_error(ERR_NO_PERMISSION); } // disable thread preview if we can't view threads if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canviewthreads'])) { $vbulletin->options['threadpreview'] = 0; } // check if there is a forum password and if so, ensure the user has it set verify_forum_password($foruminfo['forumid'], $foruminfo['password']); // verify that we are at the canonical SEO url // and redirect to this if not //verify_seo_url('forum', $foruminfo, array('pagenumber' => $_REQUEST['pagenumber'])); // get vbulletin->iforumcache - for use by makeforumjump and forums list // fetch the forum even if they are invisible since its needed // for the title but we'll unset that further down // also fetch subscription info for $show['subscribed'] variable cache_ordered_forums(1, 1, $vbulletin->userinfo['userid']); $show['newthreadlink'] = iif(!$show['search_engine'] and $foruminfo['allowposting'], true, false); $show['threadicons'] = iif($foruminfo['allowicons'], true, false); $show['threadratings'] = iif($foruminfo['allowratings'], true, false); $show['subscribed_to_forum'] = $vbulletin->forumcache["{$foruminfo['forumid']}"]['subscribeforumid'] != '' ? true : false; if (!$daysprune) { if ($vbulletin->userinfo['daysprune']) { $daysprune = $vbulletin->userinfo['daysprune']; } else { $daysprune = iif($foruminfo['daysprune'], $foruminfo['daysprune'], 30); } } $daysprune = -1; // FRNR // ### GET FORUMS, PERMISSIONS, MODERATOR iCACHES ######################## cache_moderators(); // draw nav bar $navbits = array(); $navbits[$vbulletin->options['forumhome'] . '.php' . $vbulletin->session->vars['sessionurl_q']] = $vbphrase['forum']; $parentlist = array_reverse(explode(',', substr($foruminfo['parentlist'], 0, -3))); foreach ($parentlist as $forumID) { $forumTitle = $vbulletin->forumcache["{$forumID}"]['title']; $navbits[fetch_seo_url('forum', array('forumid' => $forumID, 'title' => $forumTitle))] = $forumTitle; } // pop the last element off the end of the $nav array so that we can show it without a link array_pop($navbits); $navbits[''] = $foruminfo['title']; $navbits = construct_navbits($navbits); $navbar = render_navbar_template($navbits); $moderatorslist = ''; $listexploded = explode(',', $foruminfo['parentlist']); $showmods = array(); $show['moderators'] = false; $totalmods = 0; foreach ($listexploded as $parentforumid) { if (!$imodcache["{$parentforumid}"] or $parentforumid == -1) { continue; } foreach ($imodcache["{$parentforumid}"] as $moderator) { if ($showmods["{$moderator['userid']}"] === true) { continue; } $showmods["{$moderator['userid']}"] = true; $show['comma_leader'] = $moderatorslist != ''; $show['moderators'] = true; $totalmods++; } } // ### BUILD FORUMS LIST ################################################# // get an array of child forum ids for this forum $foruminfo['childlist'] = explode(',', $foruminfo['childlist']); // define max depth for forums display based on $vbulletin->options[forumhomedepth] define('MAXFORUMDEPTH', $vbulletin->options['forumdisplaydepth']); if (($vbulletin->options['showforumusers'] == 1 or $vbulletin->options['showforumusers'] == 2 or $vbulletin->options['showforumusers'] > 2 and $vbulletin->userinfo['userid']) and !$show['search_engine']) { $datecut = TIMENOW - $vbulletin->options['cookietimeout']; $forumusers = $db->query_read_slave("\n \t\tSELECT user.username, (user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible, user.usergroupid,\n \t\t\tsession.userid, session.inforum, session.lastactivity, session.badlocation,\n \t\t\tIF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid\n \t\tFROM " . TABLE_PREFIX . "session AS session\n \t\tLEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)\n \t\tWHERE session.lastactivity > {$datecut}\n \t\tORDER BY" . iif($vbulletin->options['showforumusers'] == 1 or $vbulletin->options['showforumusers'] == 3, " username ASC,") . " lastactivity DESC\n \t"); $numberregistered = 0; $numberguest = 0; $doneuser = array(); if ($vbulletin->userinfo['userid']) { // fakes the user being in this forum $loggedin = array('userid' => $vbulletin->userinfo['userid'], 'username' => $vbulletin->userinfo['username'], 'invisible' => $vbulletin->userinfo['invisible'], 'invisiblemark' => $vbulletin->userinfo['invisiblemark'], 'inforum' => $foruminfo['forumid'], 'lastactivity' => TIMENOW, 'musername' => $vbulletin->userinfo['musername']); $numberregistered = 1; fetch_online_status($loggedin); $show['comma_leader'] = false; $doneuser["{$vbulletin->userinfo['userid']}"] = 1; } $inforum = array(); // this require the query to have lastactivity ordered by DESC so that the latest location will be the first encountered. while ($loggedin = $db->fetch_array($forumusers)) { if ($loggedin['badlocation']) { continue; } if (empty($doneuser["{$loggedin['userid']}"])) { if (in_array($loggedin['inforum'], $foruminfo['childlist']) and $loggedin['inforum'] != -1) { if (!$loggedin['userid']) { // this is a guest $numberguest++; $inforum["{$loggedin['inforum']}"]++; } else { $numberregistered++; $inforum["{$loggedin['inforum']}"]++; if (fetch_online_status($loggedin)) { fetch_musername($loggedin); $show['comma_leader'] = $activeusers != ''; } } } if ($loggedin['userid']) { $doneuser["{$loggedin['userid']}"] = 1; } } } if (!$vbulletin->userinfo['userid']) { $numberguest = $numberguest == 0 ? 1 : $numberguest; } $totalonline = $numberregistered + $numberguest; unset($joingroupid, $key, $datecut, $invisibleuser, $userinfo, $userid, $loggedin, $index, $value, $forumusers, $parentarray); $show['activeusers'] = true; } else { $show['activeusers'] = false; } // ############################################################################# // get read status for this forum and children $unreadchildforums = 0; foreach ($foruminfo['childlist'] as $val) { if ($val == -1 or $val == $foruminfo['forumid']) { continue; } if ($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']) { $lastread_child = max($vbulletin->forumcache["{$val}"]['forumread'], TIMENOW - $vbulletin->options['markinglimit'] * 86400); } else { $lastread_child = max(intval(fetch_bbarray_cookie('forum_view', $val)), $vbulletin->userinfo['lastvisit']); } if ($vbulletin->forumcache["{$val}"]['lastpost'] > $lastread_child) { $unreadchildforums = 1; break; } } $forumbits = fr_construct_forum_bit($forumid); // admin tools $show['post_queue'] = can_moderate($foruminfo['forumid'], 'canmoderateposts'); $show['attachment_queue'] = can_moderate($foruminfo['forumid'], 'canmoderateattachments'); $show['mass_move'] = can_moderate($foruminfo['forumid'], 'canmassmove'); $show['mass_prune'] = can_moderate($foruminfo['forumid'], 'canmassprune'); $show['post_new_announcement'] = can_moderate($foruminfo['forumid'], 'canannounce'); $show['addmoderator'] = $permissions['adminpermissions'] & $vbulletin->bf_ugp_adminpermissions['cancontrolpanel']; $show['adminoptions'] = ($show['post_queue'] or $show['attachment_queue'] or $show['mass_move'] or $show['mass_prune'] or $show['addmoderator'] or $show['post_new_announcement']); $navpopup = array('id' => 'forumdisplay_navpopup', 'title' => $foruminfo['title_clean'], 'link' => fetch_seo_url('forum', $foruminfo)); construct_quick_nav($navpopup); ///////////////////////////////// if ($foruminfo['cancontainthreads']) { ///////////////////////////////// if ($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']) { $foruminfo['forumread'] = $vbulletin->forumcache["{$foruminfo['forumid']}"]['forumread']; $lastread = max($foruminfo['forumread'], TIMENOW - $vbulletin->options['markinglimit'] * 86400); } else { $bbforumview = intval(fetch_bbarray_cookie('forum_view', $foruminfo['forumid'])); $lastread = max($bbforumview, $vbulletin->userinfo['lastvisit']); } // Inline Moderation $show['movethread'] = can_moderate($forumid, 'canmanagethreads') ? true : false; $show['deletethread'] = (can_moderate($forumid, 'candeleteposts') or can_moderate($forumid, 'canremoveposts')) ? true : false; $show['approvethread'] = can_moderate($forumid, 'canmoderateposts') ? true : false; $show['openthread'] = can_moderate($forumid, 'canopenclose') ? true : false; $show['inlinemod'] = ($show['movethread'] or $show['deletethread'] or $show['approvethread'] or $show['openthread']) ? true : false; $show['spamctrls'] = ($show['inlinemod'] and $show['deletethread']); $url = $show['inlinemod'] ? SCRIPTPATH : ''; // fetch popup menu if ($show['popups'] and $show['inlinemod']) { } else { $threadadmin_imod_thread_menu = ''; } // get announcements $announcebits = ''; if ($show['threadicons'] and $show['inlinemod']) { $announcecolspan = 6; } else { if (!$show['threadicons'] and !$show['inlinemod']) { $announcecolspan = 4; } else { $announcecolspan = 5; } } $mindate = TIMENOW - 2592000; // 30 days $hook_query_fields = $hook_query_joins = $hook_query_where = ''; $announcements = $db->query_read_slave("\n \t\tSELECT\n \t\t\tannouncement.announcementid, startdate, title, announcement.views,\n \t\t\tuser.username, user.userid, user.usertitle, user.customtitle, user.usergroupid,\n \t\t\tIF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid\n \t\t\t" . ($vbulletin->userinfo['userid'] ? ", NOT ISNULL(announcementread.announcementid) AS readannounce" : "") . "\n \t\t\t{$hook_query_fields}\n \t\tFROM " . TABLE_PREFIX . "announcement AS announcement\n \t\t" . ($vbulletin->userinfo['userid'] ? "LEFT JOIN " . TABLE_PREFIX . "announcementread AS announcementread ON (announcementread.announcementid = announcement.announcementid AND announcementread.userid = " . $vbulletin->userinfo['userid'] . ")" : "") . "\n \t\tLEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = announcement.userid)\n \t\t{$hook_query_joins}\n \t\tWHERE startdate <= " . TIMENOW . "\n \t\t\tAND enddate >= " . TIMENOW . "\n \t\t\tAND " . fetch_forum_clause_sql($foruminfo['forumid'], 'forumid') . "\n \t\t\t{$hook_query_where}\n \t\tORDER BY startdate DESC, announcement.announcementid DESC\n \t\t" . iif($vbulletin->options['oneannounce'], "LIMIT 1")); while ($announcement = $db->fetch_array($announcements)) { fetch_musername($announcement); $announcement['title'] = fetch_censored_text($announcement['title']); $announcement['postdate'] = vbdate($vbulletin->options['dateformat'], $announcement['startdate']); if ($announcement['readannounce'] or $announcement['startdate'] <= $mindate) { $announcement['statusicon'] = 'old'; } else { $announcement['statusicon'] = 'new'; } $announcement['views'] = vb_number_format($announcement['views']); $announcementidlink = iif(!$vbulletin->options['oneannounce'], "&a={$announcement['announcementid']}"); // FRNR START if ($pagenumber == 1) { $avatarurl = ''; $userinfoavatar = fetch_userinfo($announcement['userid'], FETCH_USERINFO_AVATAR); fetch_avatar_from_userinfo($userinfoavatar, true, false); if ($userinfoavatar['avatarurl'] != '') { $avatarurl = process_avatarurl($userinfoavatar['avatarurl']); } unset($userinfoavatar); $tmp = array('thread_id' => $foruminfo['forumid'], 'announcement' => 1, 'new_posts' => $announcement['readannounce'] ? 0 : 1, 'thread_title' => prepare_utf8_string(strip_tags($announcement['title'])), 'thread_preview' => prepare_utf8_string(preview_chop(html_entity_decode($announcement['pagetext']), FR_PREVIEW_LEN)), 'post_userid' => $announcement['userid'], 'post_lastposttime' => prepare_utf8_string(date_trunc($announcement['postdate'])), 'post_username' => prepare_utf8_string(strip_tags($announcement['username']))); if ($avatarurl != '') { $tmp['avatarurl'] = $avatarurl; } $announcements_out[] = $tmp; } // FRNR END } // display threads if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canviewothers'])) { $limitothers = "AND postuserid = " . $vbulletin->userinfo['userid'] . " AND " . $vbulletin->userinfo['userid'] . " <> 0"; } else { $limitothers = ''; } if (can_moderate($foruminfo['forumid'])) { $redirectjoin = "LEFT JOIN " . TABLE_PREFIX . "threadredirect AS threadredirect ON(thread.open = 10 AND thread.threadid = threadredirect.threadid)"; } else { $redirectjoin = ''; } // filter out deletion notices if can't be seen if ($forumperms & $vbulletin->bf_ugp_forumpermissions['canseedelnotice'] or can_moderate($foruminfo['forumid'])) { $canseedelnotice = true; $deljoin = "LEFT JOIN " . TABLE_PREFIX . "deletionlog AS deletionlog ON(thread.threadid = deletionlog.primaryid AND deletionlog.type = 'thread')"; } else { $canseedelnotice = false; $deljoin = ''; } // remove threads from users on the global ignore list if user is not a moderator if ($Coventry = fetch_coventry('string') and !can_moderate($foruminfo['forumid'])) { $globalignore = "AND postuserid NOT IN ({$Coventry}) "; } else { $globalignore = ''; } // look at thread limiting options $stickyids = ''; $stickycount = 0; if ($daysprune != -1) { if ($vbulletin->userinfo['userid'] and in_coventry($vbulletin->userinfo['userid'], true)) { $tachyjoin = "LEFT JOIN " . TABLE_PREFIX . "tachythreadpost AS tachythreadpost ON " . "(tachythreadpost.threadid = thread.threadid AND tachythreadpost.userid = " . $vbulletin->userinfo['userid'] . ")"; $datecut = " AND (thread.lastpost >= " . (TIMENOW - $daysprune * 86400) . " OR tachythreadpost.lastpost >= " . (TIMENOW - $daysprune * 86400) . ")"; } else { $datecut = "AND lastpost >= " . (TIMENOW - $daysprune * 86400); $tachyjoin = ""; } $show['noposts'] = false; } else { $tachyjoin = ""; $datecut = ""; $show['noposts'] = true; } // complete form fields on page $daysprunesel = iif($daysprune == -1, 'all', $daysprune); $daysprunesel = array($daysprunesel => 'selected="selected"'); $vbulletin->input->clean_array_gpc('r', array('sortorder' => TYPE_NOHTML, 'prefixid' => TYPE_NOHTML)); // prefix options $prefix_options = fetch_prefix_html($foruminfo['forumid'], $vbulletin->GPC['prefixid']); $prefix_selected = array('anythread', 'anythread' => '', 'none' => ''); if ($vbulletin->GPC['prefixid']) { //no prefix id if ($vbulletin->GPC['prefixid'] == '-1') { $prefix_filter = "AND thread.prefixid = ''"; $prefix_selected['none'] = ' selected="selected"'; } else { if ($vbulletin->GPC['prefixid'] == '-2') { $prefix_filter = "AND thread.prefixid <> ''"; $prefix_selected['anyprefix'] = ' selected="selected"'; } else { $prefix_filter = "AND thread.prefixid = '" . $db->escape_string($vbulletin->GPC['prefixid']) . "'"; } } } else { $prefix_filter = ''; $prefix_selected['anythread'] = ' selected="selected"'; } // default sorting methods if (empty($sortfield)) { $sortfield = $foruminfo['defaultsortfield']; } if (empty($vbulletin->GPC['sortorder'])) { $vbulletin->GPC['sortorder'] = $foruminfo['defaultsortorder']; } // look at sorting options: if ('asc' != ($sortorder = $vbulletin->GPC['sortorder'])) { $sqlsortorder = 'DESC'; $order = array('desc' => 'checked="checked"'); $vbulletin->GPC['sortorder'] = 'desc'; } else { $sqlsortorder = ''; $order = array('asc' => 'checked="checked"'); } $sqlsortfield2 = ''; switch ($sortfield) { case 'title': $sqlsortfield = 'thread.title'; break; case 'lastpost': $sqlsortfield = 'lastpost'; break; case 'replycount': case 'views': $sqlsortfield = 'views'; case 'postusername': $sqlsortfield = $sortfield; break; case 'voteavg': if ($foruminfo['allowratings']) { $sqlsortfield = 'voteavg'; $sqlsortfield2 = 'votenum'; break; } case 'dateline': $sqlsortfield = 'thread.dateline'; break; // else, use last post // else, use last post default: $handled = false; if (!$handled) { $sqlsortfield = 'lastpost'; $sortfield = 'lastpost'; } } $sort = array($sortfield => 'selected="selected"'); $visiblethreads = " AND visible = 1"; /*if (!can_moderate($forumid, 'canmoderateposts')) { if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canseedelnotice'])) { $visiblethreads = " AND visible = 1 "; } else { $visiblethreads = " AND visible IN (1,2)"; } } else { $visiblethreads = " AND visible IN (0,1,2)"; }*/ $hook_query_fields = $hook_query_joins = $hook_query_where = ''; # Include visible IN (0,1,2) in order to hit upon the 4 column index $threadscount = $db->query_first_slave("\n \t\tSELECT COUNT(*) AS threads, SUM(IF(thread.lastpost > {$lastread} AND open <> 10, 1, 0)) AS newthread\n \t\t{$hook_query_fields}\n \t\tFROM " . TABLE_PREFIX . "thread AS thread\n \t\t{$tachyjoin}\n \t\t{$hook_query_joins}\n \t\tWHERE forumid = {$foruminfo['forumid']}\n \t\t\tAND sticky = 0\n \t\t\t{$prefix_filter}\n \t\t\t{$visiblethreads}\n \t\t\t{$globalignore}\n \t\t\t{$limitothers}\n \t\t\t{$datecut}\n \t\t\t{$hook_query_where}\n \t"); $totalthreads = $threadscount['threads']; $newthreads = $threadscount['newthread']; // set defaults sanitize_pageresults($totalthreads, $pagenumber, $perpage, 200, $vbulletin->options['maxthreads']); // get number of sticky threads for the first page // on the first page there will be the sticky threads PLUS the $perpage other normal threads // not quite a bug, but a deliberate feature! if ($pagenumber == 1) { $stickies = $db->query_read_slave("\n \t\t\tSELECT thread.threadid, lastpost, open\n \t\t\tFROM " . TABLE_PREFIX . "thread AS thread\n \t\t\tWHERE forumid = {$foruminfo['forumid']}\n \t\t\t\tAND sticky = 1\n \t\t\t\t{$prefix_filter}\n \t\t\t\t{$visiblethreads}\n \t\t\t\t{$limitothers}\n \t\t\t\t{$globalignore}\n \t\t"); while ($thissticky = $db->fetch_array($stickies)) { $stickycount++; if ($thissticky['lastpost'] >= $lastread and $thissticky['open'] != 10) { $newthreads++; } $stickyids .= ",{$thissticky['threadid']}"; } $db->free_result($stickies); unset($thissticky, $stickies); } $limitlower = ($pagenumber - 1) * $perpage; $limitupper = $pagenumber * $perpage; if ($limitupper > $totalthreads) { $limitupper = $totalthreads; if ($limitlower > $totalthreads) { $limitlower = $totalthreads - $perpage - 1; } } if ($limitlower < 0) { $limitlower = 0; } if ($foruminfo['allowratings']) { $vbulletin->options['showvotes'] = intval($vbulletin->options['showvotes']); $votequery = "\n \t\t\tIF(votenum >= " . $vbulletin->options['showvotes'] . ", votenum, 0) AS votenum,\n \t\t\tIF(votenum >= " . $vbulletin->options['showvotes'] . " AND votenum > 0, votetotal / votenum, 0) AS voteavg,\n \t\t"; } else { $votequery = ''; } if ($previewtype == 1) { $previewfield = "post.pagetext AS preview, post.username AS lastpost_username, post.userid AS lastpost_userid,"; $previewjoin = "LEFT JOIN " . TABLE_PREFIX . "post AS post ON(post.postid = thread.firstpostid)"; } else { $previewfield = "post.pagetext AS preview, post.username AS lastpost_username, post.userid AS lastpost_userid,"; $previewjoin = "LEFT JOIN " . TABLE_PREFIX . "post AS post ON(post.postid = thread.lastpostid)"; } if ($vbulletin->userinfo['userid'] and in_coventry($vbulletin->userinfo['userid'], true)) { $tachyjoin = "\n \t\t\tLEFT JOIN " . TABLE_PREFIX . "tachythreadpost AS tachythreadpost ON\n \t\t\t\t(tachythreadpost.threadid = thread.threadid AND tachythreadpost.userid = " . $vbulletin->userinfo['userid'] . ")\n \t\t\tLEFT JOIN " . TABLE_PREFIX . "tachythreadcounter AS tachythreadcounter ON\n \t\t\t\t(tachythreadcounter.threadid = thread.threadid AND tachythreadcounter.userid = " . $vbulletin->userinfo['userid'] . ")\n \t\t"; $tachy_columns = "\n \t\t\tIF(tachythreadpost.userid IS NULL, thread.lastpost, tachythreadpost.lastpost) AS lastpost,\n \t\t\tIF(tachythreadpost.userid IS NULL, thread.lastposter, tachythreadpost.lastposter) AS lastposter,\n \t\t\tIF(tachythreadpost.userid IS NULL, thread.lastposterid, tachythreadpost.lastposterid) AS lastposterid,\n \t\t\tIF(tachythreadpost.userid IS NULL, thread.lastpostid, tachythreadpost.lastpostid) AS lastpostid,\n \t\t\tIF(tachythreadcounter.userid IS NULL, thread.replycount, thread.replycount + tachythreadcounter.replycount) AS replycount,\n \t\t\tIF(thread.views<=IF(tachythreadcounter.userid IS NULL, thread.replycount, thread.replycount + tachythreadcounter.replycount), IF(tachythreadcounter.userid IS NULL, thread.replycount, thread.replycount + tachythreadcounter.replycount)+1, thread.views) AS views\n \t\t"; } else { $tachyjoin = ''; $tachy_columns = 'thread.lastpost, thread.lastposter, thread.lastposterid, thread.lastpostid, thread.replycount, IF(thread.views<=thread.replycount, thread.replycount+1, thread.views) AS views'; } $hook_query_fields = $hook_query_joins = $hook_query_where = ''; $getthreadids = $db->query_read_slave("\n \t\tSELECT " . iif($sortfield == 'voteavg', $votequery) . " thread.threadid,\n \t\t\t{$tachy_columns}\n \t\t\t{$hook_query_fields}\n \t\tFROM " . TABLE_PREFIX . "thread AS thread\n \t\t{$tachyjoin}\n \t\t{$hook_query_joins}\n \t\tWHERE forumid = {$foruminfo['forumid']}\n \t\t\tAND sticky = 0\n \t\t\t{$prefix_filter}\n \t\t\t{$visiblethreads}\n \t\t\t{$globalignore}\n \t\t\t{$limitothers}\n \t\t\t{$datecut}\n \t\t\t{$hook_query_where}\n \t\tORDER BY sticky DESC, {$sqlsortfield} {$sqlsortorder}" . (!empty($sqlsortfield2) ? ", {$sqlsortfield2} {$sqlsortorder}" : '') . "\n \t\tLIMIT {$limitlower}, {$perpage}\n \t"); $ids = ''; while ($thread = $db->fetch_array($getthreadids)) { $ids .= ',' . $thread['threadid']; } $ids .= $stickyids; $db->free_result($getthreadids); unset($thread, $getthreadids); $hook_query_fields = $hook_query_joins = $hook_query_where = ''; $threads = $db->query_read_slave("\n \t\tSELECT {$votequery} {$previewfield}\n \t\t\tthread.threadid, thread.title AS threadtitle, thread.forumid, pollid, open, postusername, postuserid, thread.iconid AS threadiconid,\n \t\t\tthread.dateline, notes, thread.visible, sticky, votetotal, thread.attach, {$tachy_columns},\n \t\t\tthread.prefixid, thread.taglist, hiddencount, deletedcount,\n \t\t\tuser.usergroupid, user.homepage, user.options AS useroptions, IF(userlist.friend = 'yes', 1, 0) AS isfriend\n \t\t\t" . (($vbulletin->options['threadsubscribed'] and $vbulletin->userinfo['userid']) ? ", NOT ISNULL(subscribethread.subscribethreadid) AS issubscribed" : "") . "\n \t\t\t" . ($deljoin ? ", deletionlog.userid AS del_userid, deletionlog.username AS del_username, deletionlog.reason AS del_reason" : "") . "\n \t\t\t" . (($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']) ? ", threadread.readtime AS threadread" : "") . "\n \t\t\t" . ($redirectjoin ? ", threadredirect.expires" : "") . "\n \t\t\t{$hook_query_fields}\n \t\tFROM " . TABLE_PREFIX . "thread AS thread\n \t\t\tLEFT JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = thread.lastposterid)\n \t\t\tLEFT JOIN " . TABLE_PREFIX . "userlist AS userlist ON (userlist.relationid = user.userid AND userlist.type = 'buddy' AND userlist.userid = " . $vbulletin->userinfo['userid'] . ")\n \t\t\t{$deljoin}\n \t\t\t" . (($vbulletin->options['threadsubscribed'] and $vbulletin->userinfo['userid']) ? " LEFT JOIN " . TABLE_PREFIX . "subscribethread AS subscribethread ON(subscribethread.threadid = thread.threadid AND subscribethread.userid = " . $vbulletin->userinfo['userid'] . " AND canview = 1)" : "") . "\n \t\t\t" . (($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']) ? " LEFT JOIN " . TABLE_PREFIX . "threadread AS threadread ON (threadread.threadid = thread.threadid AND threadread.userid = " . $vbulletin->userinfo['userid'] . ")" : "") . "\n \t\t\t{$previewjoin}\n \t\t\t{$tachyjoin}\n \t\t\t{$redirectjoin}\n \t\t\t{$hook_query_joins}\n \t\tWHERE thread.threadid IN (0{$ids}) {$hook_query_where}\n \t\tORDER BY sticky DESC, {$sqlsortfield} {$sqlsortorder}" . (!empty($sqlsortfield2) ? ", {$sqlsortfield2} {$sqlsortorder}" : '') . "\n \t"); unset($limitothers, $delthreadlimit, $deljoin, $datecut, $votequery, $sqlsortfield, $sqlsortorder, $threadids, $sqlsortfield2); // Get Dot Threads $dotthreads = fetch_dot_threads_array($ids); if ($vbulletin->options['showdots'] and $vbulletin->userinfo['userid']) { $show['dotthreads'] = true; } else { $show['dotthreads'] = false; } unset($ids); $pageinfo = array(); if ($vbulletin->GPC['prefixid']) { $pageinfo['prefixid'] = $vbulletin->GPC['prefixid']; } if ($vbulletin->GPC['daysprune']) { $pageinfo['daysprune'] = $daysprune; } $show['fetchseo'] = true; $oppositesort = $vbulletin->GPC['sortorder'] == 'asc' ? 'desc' : 'asc'; $pageinfo_voteavg = $pageinfo + array('sort' => 'voteavg', 'order' => 'voteavg' == $sortfield ? $oppositesort : 'desc'); $pageinfo_title = $pageinfo + array('sort' => 'title', 'order' => 'title' == $sortfield ? $oppositesort : 'asc'); $pageinfo_postusername = $pageinfo + array('sort' => 'postusername', 'order' => 'postusername' == $sortfield ? $oppositesort : 'asc'); $pageinfo_flastpost = $pageinfo + array('sort' => 'lastpost', 'order' => 'lastpost' == $sortfield ? $oppositesort : 'asc'); $pageinfo_replycount = $pageinfo + array('sort' => 'replycount', 'order' => 'replycount' == $sortfield ? $oppositesort : 'desc'); $pageinfo_views = $pageinfo + array('sort' => 'views', 'order' => 'views' == $sortfield ? $oppositesort : 'desc'); $pageinfo_sort = $pageinfo + array(sort => $sortfield, 'order' => $oppositesort, 'pp' => $perpage, 'page' => $pagenumber); if ($totalthreads > 0 or $stickyids) { if ($totalthreads > 0) { $limitlower++; } // check to see if there are any threads to display. If there are, do so, otherwise, show message if ($vbulletin->options['threadpreview'] > 0) { // Get Buddy List $buddy = array(); if (trim($vbulletin->userinfo['buddylist'])) { $buddylist = preg_split('/( )+/', trim($vbulletin->userinfo['buddylist']), -1, PREG_SPLIT_NO_EMPTY); foreach ($buddylist as $buddyuserid) { $buddy["{$buddyuserid}"] = 1; } } DEVDEBUG('buddies: ' . implode(', ', array_keys($buddy))); // Get Ignore Users $ignore = array(); if (trim($vbulletin->userinfo['ignorelist'])) { $ignorelist = preg_split('/( )+/', trim($vbulletin->userinfo['ignorelist']), -1, PREG_SPLIT_NO_EMPTY); foreach ($ignorelist as $ignoreuserid) { if (!$buddy["{$ignoreuserid}"]) { $ignore["{$ignoreuserid}"] = 1; } } } DEVDEBUG('ignored users: ' . implode(', ', array_keys($ignore))); } $show['threads'] = true; $threadbits = ''; $threadbits_sticky = ''; $counter = 0; $toread = 0; while ($thread = $db->fetch_array($threads)) { // AND $counter++ < $perpage) // build thread data $thread = process_thread_array($thread, $lastread, $foruminfo['allowicons']); $realthreadid = $thread['realthreadid']; if ($thread['sticky']) { $threadbit =& $threadbits_sticky; } else { $threadbit =& $threadbits; } // Soft Deleted Thread if ($thread['visible'] == 2) { $thread['deletedcount']++; $show['threadtitle'] = (can_moderate($forumid) or $vbulletin->userinfo['userid'] != 0 and $vbulletin->userinfo['userid'] == $thread['postuserid']) ? true : false; $show['deletereason'] = !empty($thread['del_reason']) ? true : false; $show['viewthread'] = can_moderate($forumid) ? true : false; $show['managethread'] = (can_moderate($forumid, 'candeleteposts') or can_moderate($forumid, 'canremoveposts')) ? true : false; $show['moderated'] = ($thread['hiddencount'] > 0 and can_moderate($forumid, 'canmoderateposts')) ? true : false; $show['deletedthread'] = $canseedelnotice; } else { if (!$thread['visible']) { $thread['hiddencount']++; } $show['moderated'] = ($thread['hiddencount'] > 0 and can_moderate($forumid, 'canmoderateposts')) ? true : false; $show['deletedthread'] = ($thread['deletedcount'] > 0 and $canseedelnotice) ? true : false; $pageinfo_lastpage = array(); if ($show['pagenavmore']) { $pageinfo_lastpage['page'] = $thread['totalpages']; } $pageinfo_newpost = array('goto' => 'newpost'); $pageinfo_lastpost = array('p' => $thread['lastpostid']); // prepare the member action drop-down menu $memberaction_dropdown = construct_memberaction_dropdown(fetch_lastposter_userinfo($thread)); } // FRNR Start $avatarurl = ''; if ($thread['lastpost_userid'] > 0) { $userinfoavatar = fetch_userinfo($thread['lastpost_userid'], FETCH_USERINFO_AVATAR); fetch_avatar_from_userinfo($userinfoavatar, true, false); if ($userinfoavatar['avatarurl'] != '') { $avatarurl = process_avatarurl($userinfoavatar['avatarurl']); } unset($userinfoavatar); } $tmp = array('thread_id' => $thread['threadid'], 'new_posts' => $show['gotonewpost'] ? 1 : 0, 'forum_id' => $thread['forumid'], 'total_posts' => $thread['totalposts'] ? $thread['totalposts'] : 0, 'thread_title' => prepare_utf8_string(strip_tags($thread['threadtitle'])), 'thread_preview' => prepare_utf8_string(preview_chop(html_entity_decode($thread['preview']), FR_PREVIEW_LEN)), 'post_userid' => $thread['lastpost_userid'], 'post_lastposttime' => prepare_utf8_string(date_trunc($thread['lastpostdate']) . ' ' . $thread['lastposttime']), 'post_username' => prepare_utf8_string(strip_tags($thread['lastpost_username']))); if ($avatarurl != '') { $tmp['avatarurl'] = $avatarurl; } if ($thread['prefixid']) { $tmp['prefix'] = prepare_utf8_string(strip_tags($vbphrase["prefix_{$thread['prefixid']}_title_plain"])); } if ($thread['attach']) { $tmp['attach'] = true; } if ($thread['pollid']) { $tmp['poll'] = true; } if ($thread['open'] == 10) { // Special case for redirect threads $tmp = array_merge($tmp, array('post_userid' => $thread['postuserid'], 'post_username' => prepare_utf8_string(strip_tags($thread['postusername'])), 'poll' => false)); } if ($thread['sticky']) { $thread_data_sticky[] = $tmp; } else { $thread_data[] = $tmp; } // FRNR Stop } $db->free_result($threads); unset($thread, $counter); $pageinfo_pagenav = array(); if (!empty($vbulletin->GPC['perpage'])) { $pageinfo_pagenav['pp'] = $perpage; } if (!empty($vbulletin->GPC['prefixid'])) { $pageinfo_pagenav['prefixid'] = $vbulletin->GPC['prefixid']; } if (!empty($vbulletin->GPC['sortfield'])) { $pageinfo_pagenav['sort'] = $sortfield; } if (!empty($vbulletin->GPC['sortorder'])) { $pageinfo_pagenav['order'] = $vbulletin->GPC['sortorder']; } if (!empty($vbulletin->GPC['daysprune'])) { $pageinfo_pagenav['daysprune'] = $daysprune; } $pagenav = construct_page_nav($pagenumber, $perpage, $totalthreads, 'forumdisplay.php?' . $vbulletin->session->vars['sessionurl'] . "f={$foruminfo['forumid']}", '', '', 'forum', $foruminfo, $pageinfo_pagenav); } unset($threads, $dotthreads); // get colspan for bottom bar $foruminfo['bottomcolspan'] = 5; if ($foruminfo['allowicons']) { $foruminfo['bottomcolspan']++; } if ($show['inlinemod']) { $foruminfo['bottomcolspan']++; } $show['threadslist'] = true; ///////////////////////////////// } else { $show['threadslist'] = false; $canpost = false; // FRNR } ///////////////////////////////// if (!$vbulletin->GPC['prefixid'] and $newthreads < 1 and $unreadchildforums < 1) { mark_forum_read($foruminfo, $vbulletin->userinfo['userid'], TIMENOW); } // FNRN Below $out = array(); if (is_array($thread_data) && count($thread_data) > 0) { $out['threads'] = $thread_data; } else { $out['threads'] = array(); } if (is_array($thread_data_sticky) && count($thread_data_sticky) > 0) { $out['threads_sticky'] = $thread_data_sticky; $out['total_sticky_threads'] = count($thread_data_sticky); } else { $out['threads_sticky'] = array(); $out['total_sticky_threads'] = 0; } // Announcements become #1 on the threads if (is_array($announcements_out) && count($announcements_out) == 1) { array_unshift($out['threads'], $announcements_out[0]); $totalthreads++; } $out['total_threads'] = $totalthreads ? $totalthreads : 0; if ($forumbits) { $out['forums'] = $forumbits; } else { $out['forums'] = array(); } $out['canpost'] = $canpost ? 1 : 0; $out['canattach'] = ($forumperms & $vbulletin->bf_ugp_forumpermissions['canpostattachment'] and $vbulletin->userinfo['userid']); // Get thread prefixes for this forum (if any) $prefix_out = array(); if ($prefixsets = fetch_prefix_array($forumid)) { foreach ($prefixsets as $prefixsetid => $prefixes) { $optgroup_options = ''; foreach ($prefixes as $prefixid => $prefix) { if ($permcheck and !can_use_prefix($prefixid, $prefix['restrictions'])) { continue; } $optionvalue = $prefixid; $optiontitle = htmlspecialchars_uni($vbphrase["prefix_{$prefixid}_title_plain"]); $prefix_out[] = array('prefixid' => $prefixid, 'prefixcaption' => prepare_utf8_string($optiontitle)); } } } if ($foruminfo['options'] & $vbulletin->bf_misc_forumoptions['prefixrequired']) { $out['prefixrequired'] = true; } else { $out['prefixrequired'] = false; } $out['prefixes'] = $prefix_out; return $out; }
$show['notificationtype'] = true; $show['threadratings'] = true; $show['threadrating'] = true; while ($thread = $db->fetch_array($threads)) { // unset the thread preview if it can't be seen $forumperms = fetch_permissions($thread['forumid']); if ($vbulletin->options['threadpreview'] > 0 AND !($forumperms & $vbulletin->bf_ugp_forumpermissions['canviewthreads'])) { $thread['preview'] = ''; } $threadid = $thread['threadid']; // build thread data $thread = process_thread_array($thread, $lastread["$thread[forumid]"]); switch ($emailupdate["$thread[threadid]"]) { case 0: $thread['notification'] = $vbphrase['none']; break; case 1: $thread['notification'] = $vbphrase['instant']; break; case 2: $thread['notification'] = $vbphrase['daily']; break; case 3: $thread['notification'] = $vbphrase['weekly']; break;
public function render($current_user, $criteria, $template_name = '') { global $vbulletin, $vbphrase, $show; require_once DIR . '/includes/functions_forumdisplay.php'; require_once DIR . '/includes/functions_misc.php'; require_once DIR . '/includes/functions_user.php'; fetch_phrase_group('search'); if (!strlen($template_name)) { $template_name = 'search_results_postbit'; } /* Post is not a good name for this array, however its what it used to be called (when it wasn't such a bad name) and changing it makes it certain that a lot of hooks are going to break. */ $post = array(); $thread = $this->post->get_thread(); $forum = $thread->get_forum(); $this->set_replydata($this->post->get_field('threadid'), $this->post->get_field('postid'), $current_user); if ($this->replydata['mylastpost'] > 0) { $post_statusicon[] = 'dot'; } if (!$thread->get_field('open')) { $post_statusicon[] = 'lock'; } if ($this->replydata['lastread'] < $thread->get_field('lastpost')) { $post_statusicon[] = 'new'; } if (!count($post_statusicon)) { $post_statusicon[] = 'old'; } $post_statusicon = implode('_', $post_statusicon); $post['postid'] = $this->post->get_field('postid'); $post['postdateline'] = $this->post->get_field('dateline'); $post['posttitle'] = vB_Search_Searchtools::stripHtmlTags(htmlspecialchars_decode($this->post->get_display_title())); if (empty($post['posttitle'])) { $post['posttitle'] = $vbphrase['view_post']; } $post['visible'] = $this->post->get_field('visible'); $post['attach'] = $this->post->get_field('attach'); $post['highlight'] = $criteria->get_highlights(); $post['userid'] = $this->post->get_field('userid'); $post['username'] = $this->post->get_field('username'); $post['threadid'] = $thread->get_field('threadid'); $post['threadtitle'] = $thread->get_field('title'); $post['threadiconid'] = $thread->get_field('iconid'); $post['replycount'] = $thread->get_field('replycount'); $post['views'] = $thread->get_field('views') > 0 ? $thread->get_field('views') : $thread->get_field('replycount') + 1; $post['firstpostid'] = $thread->get_field('firstpostid'); $post['prefixid'] = $thread->get_field('prefixid'); $post['taglist'] = $thread->get_field('taglist'); $post['pollid'] = $thread->get_field('pollid'); $post['sticky'] = $thread->get_field('sticky'); $post['open'] = $thread->get_field('open'); $post['lastpost'] = $thread->get_field('lastpost'); $post['forumid'] = $thread->get_field('forumid'); $post['thread_visible'] = $thread->get_field('visible'); $post['forumtitle'] = $forum->get_field('title'); $post['posticonid'] = $this->post->get_field('iconid'); $post['allowicons'] = $forum->allow_icons(); $post['posticonpath'] = $this->post->get_icon_path(); $post['posticontitle'] = $this->post->get_icon_title(); $post['posticon'] = $post['allowicons'] and $post['posticonpath']; $lastread = $forum->get_last_read_by_current_user($current_user); if ($current_user->hasForumPermission($forum->get_field('forumid'), 'canviewthreads')) { if (defined('VB_API') and VB_API === true) { $post['pagetext'] = $this->post->get_field('pagetext'); $post['message_plain'] = build_message_plain($post['pagetext']); } else { $post['pagetext'] = nl2br($this->post->get_summary(200)); } } $show['deleted'] = false; if ($current_user->isModerator()) { $log = $this->post->get_deletion_log_array(); if ($log['userid']) { $post['del_phrase'] = $vbphrase['message_deleted_by_x']; } else { $log = $thread->get_deletion_log_array(); if (!$log['userid']) { $post['del_phrase'] = $vbphrase['thread_deleted_by_x']; $log = false; } } if ($log) { $post['del_username'] = $log['username']; $post['del_userid'] = $log['userid']; $post['del_reason'] = $log['reason']; $show['deleted'] = true; } } $post['prefixid'] = $thread->get_field('prefixid'); if ($post['prefixid']) { $post['prefix_plain_html'] = htmlspecialchars_uni($vbphrase["prefix_{$post['prefixid']}_title_plain"]); $post['prefix_rich'] = $vbphrase["prefix_{$post['prefixid']}_title_rich"]; } else { $post['prefix_plain_html'] = ''; $post['prefix_rich'] = ''; } $show['disabled'] = !$this->can_inline_mod($current_user); $postuser = $this->post->get_record(); $post = process_thread_array($post, $lastread, $post['allowicons']); ($hook = vBulletinHook::fetch_hook('search_results_postbit')) ? eval($hook) : false; $template = vB_Template::create($template_name); $template->register('post', $post); $template->register('userinfo', $postuser); $template->register('threadinfo', $thread->get_record()); $template->register('dateline', $this->post->get_field('dateline')); if ($vbulletin->options['avatarenabled']) { $template->register('avatar', fetch_avatar_from_record($this->post->get_record(), true)); } $pageinfo_thread = array(); $pageinfo_post = array('p' => $post['postid']); if (!empty($post['highlight'])) { $pageinfo_post['highlight'] = urlencode(implode(' ', $post['highlight'])); $pageinfo_thread['highlight'] = urlencode(implode(' ', $post['highlight'])); } $template->register('pageinfo_post', $pageinfo_post); $template->register('pageinfo_thread', $pageinfo_thread); $template->register('post_statusicon', $post_statusicon); return $template->render(); }
// get post title if ($post['posttitle'] == '') { $post['posttitle'] = fetch_trimmed_title($post['pagetext'], 50); } else { $post['posttitle'] = fetch_censored_text($post['posttitle']); } // format post text $post['pagetext'] = nl2br($post['pagetext']); // get info from post $post = process_thread_array($post, $lastread["$post[forumid]"], $post['allowicons']); $show['managepost'] = (can_moderate($post['forumid'], 'candeleteposts') OR can_moderate($post['forumid'], 'canremoveposts')) ? true : false; $show['approvepost'] = (can_moderate($post['forumid'], 'canmoderateposts')) ? true : false; $show['managethread'] = (can_moderate($post['forumid'], 'canmanagethreads')) ? true : false; $show['disabled'] = ($show['managethread'] OR $show['managepost'] OR $show['approvepost']) ? false : true; $show['moderated'] = (!$post['visible'] OR (!$post['thread_visible'] AND $post['postid'] == $post['firstpostid'])) ? true : false; $show['spam'] = ($show['moderated'] AND $post['spamlog_postid']) ? true : false; if ($post['pdel_userid']) { $post['del_username'] =& $post['pdel_username']; $post['del_userid'] =& $post['pdel_userid']; $post['del_reason'] = fetch_censored_text($post['pdel_reason']); $post['del_phrase'] = 'message_deleted_by_x';
public function render($current_user, $criteria, $template_name = '') { require_once DIR . '/includes/functions_forumdisplay.php'; require_once DIR . '/includes/functions_user.php'; global $vbulletin, $show; if (!strlen($template_name)) { $template_name = 'search_threadbit'; } $show['forumlink'] = true; // threadbit_deleted conditionals $show['threadtitle'] = true; $show['viewthread'] = true; $show['managethread'] = true; ($hook = vBulletinHook::fetch_hook('search_results_thread_start')) ? eval($hook) : false; //thread isn't a great name for this, but it stays consistant with //previous use and what will be expected in the hook. $thread = $this->thread->get_record(); $this->set_replydata($thread['threadid'], $current_user); // get info from thread $thread['postid'] = $thread['threadid']; $thread['threadtitle'] = $thread['title']; $thread['threadiconid'] = $thread['iconid']; $thread['postdateline'] = $thread['lastpost']; $thread['issubscribed'] = $this->thread->is_subscribed($current_user); $thread['threadread'] = $this->thread->get_lastread($current_user); /* This used to be precalculated by forum, but it doesn't look expensive enough to want to bother with that. If that turns out to be wrong we'll need to do some kind of caching. */ $forum = $this->thread->get_forum(); if (!$current_user->hasForumPermission($forum->get_field('forumid'), 'canviewthreads')) { unset($thread['preview']); } //set the correct status if ($this->replydata['mylastpost'] > 0) { $post_statusicon[] = 'dot'; } if (!$thread['open']) { $post_statusicon[] = 'lock'; } if ($this->replydata['lastread'] < $thread['lastpost']) { $post_statusicon[] = 'new'; } if (!count($post_statusicon)) { $post_statusicon[] = 'old'; } $post_statusicon = implode('_', $post_statusicon); $show['deletereason'] = false; if ($thread['visible'] == 2) { $log = $this->thread->get_deletion_log_array(); $thread['del_username'] = $log['username']; $thread['del_userid'] = $log['userid']; $thread['del_reason'] = $log['reason']; $thread['deletedcount']++; $show['deletereason'] = !empty($thread['del_reason']); } else { if ($thread['visible'] == 0) { $thread['hiddencount']++; } } $thread['highlight'] = $criteria->get_highlights(); $show['moderated'] = ($thread['hiddencount'] > 0 and $current_user->canModerateForum($thread['forumid'], 'canmoderateposts')); $show['deletedthread'] = ($thread['deletedcount'] > 0 and ($current_user->canModerateForum($thread['forumid']) or $current_user->hasForumPermission($thread['forumid'], 'canseedelnotice'))); $show['disabled'] = !$this->can_inline_mod($current_user); $lastread = $forum->get_last_read_by_current_user($current_user); /* This uses $dotthreads which is built by calling fetch_dot_threads_array() in search/type/thread.php The data is very similar to data we now have, and at some point this call could probably be eliminated. */ $thread = process_thread_array($thread, $lastread); ($hook = vBulletinHook::fetch_hook('search_results_threadbit')) ? eval($hook) : false; $pageinfo = $pageinfo_lastpost = $pageinfo_firstpost = $pageinfo_lastpage = array(); if ($show['pagenavmore']) { $pageinfo_lastpage['page'] = $thread['totalpages']; } $pageinfo_lastpost['p'] = $thread['lastpostid']; $pageinfo_newpost['goto'] = 'newpost'; $pageinfo_thread = array(); if (!empty($thread['highlight'])) { $pageinfo_thread['highlight'] = urlencode(implode(' ', $thread['highlight'])); $pageinfo_newpost['highlight'] = urlencode(implode(' ', $thread['highlight'])); $pageinfo_lastpost['highlight'] = urlencode(implode(' ', $thread['highlight'])); $pageinfo_firstpost['highlight'] = urlencode(implode(' ', $thread['highlight'])); } // Work out if unread below notification needed if ($criteria->get_searchtype() == vB_Search_Core::SEARCH_NEW and $criteria->get_sort() == 'groupdateline' and $show['below_unread'] == 0 and $thread['lastpost'] < $vbulletin->userinfo['lastvisit']) { $show['below_unread'] = $criteria->get_search_term('searchdate') == 'lastvisit' ? 1 : 2; } if ($vbulletin->options['avatarenabled']) { $thread['lastpost_avatar'] = fetch_avatar_from_record($thread, true); $thread['firstpost_avatar'] = fetch_avatar_from_record($thread, true, 'postuserid', 'first_'); } ($hook = vBulletinHook::fetch_hook('search_results_thread_process')) ? eval($hook) : false; $template = vB_Template::create($template_name); $template->register('post_statusicon', $post_statusicon); $template->register('pageinfo_firstpost', $pageinfo_firstpost); $template->register('pageinfo_lastpost', $pageinfo_lastpost); $template->register('pageinfo_lastpage', $pageinfo_lastpage); $template->register('pageinfo_newpost', $pageinfo_newpost); $template->register('pageinfo', $pageinfo_thread); $template->register('dateformat', $vbulletin->options['dateformat']); $template->register('timeformat', $vbulletin->options['timeformat']); $template->register('postdateline', $thread['lastpost']); $userinfo = array('userid' => $thread['postuserid'], 'username' => $thread['postusername']); $template->register('avatar', $thread['lastpost_avatar']); $template->register('userinfo', $userinfo); $template->register('show', $show); $template->register('thread', $thread); if ($show['below_unread'] > 0) { // flag as shown. $show['below_unread'] = -1; } ($hook = vBulletinHook::fetch_hook('search_results_thread_complete')) ? eval($hook) : false; return $template->render(); }