function do_mark_read() { global $vbulletin, $foruminfo; mark_forums_read($foruminfo['forumid']); $tableinfo = $vbulletin->db->query_first("\n\tSHOW TABLES LIKE '" . TABLE_PREFIX . "forumrunner_push_data'\n "); if ($tableinfo) { if ($foruminfo['forumid'] > 0) { require_once DIR . '/includes/functions_misc.php'; $childforums = fetch_child_forums($foruminfo['forumid'], 'ARRAY'); $return_forumids = $childforums; $return_forumids[] = $foruminfo['forumid']; $vbulletin->db->query_write("\n\t\tUPDATE " . TABLE_PREFIX . "forumrunner_push_data AS forumrunner_push_data\n\t\tLEFT JOIN " . TABLE_PREFIX . "thread AS thread\n\t\t ON thread.threadid = forumrunner_push_data.vb_threadid\n\t\tSET forumrunner_push_data.vb_subsent = 0, forumrunner_push_data.vb_threadread = " . TIMENOW . "\n\t\tWHERE forumrunner_push_data.vb_userid = {$vbulletin->userinfo['userid']} AND thread.forumid IN (" . join(',', $return_forumids) . ")\n\t "); } else { $vbulletin->db->query_write("\n\t\tUPDATE " . TABLE_PREFIX . "forumrunner_push_data\n\t\tSET vb_subsent = 0, vb_threadread = " . TIMENOW . "\n\t\tWHERE vb_userid = {$vbulletin->userinfo['userid']} AND vb_threadid > 0\n\t "); } } return array('success' => 1); }
function fetch_search_forumids(&$forumchoice, $childforums = 0) { global $vbulletin, $stylevar, $display; // make sure that $forumchoice is an array if (!is_array($forumchoice)) { $forumchoice = array($forumchoice); } // initialize the $forumids for return by this function $forumids = array(); foreach ($forumchoice as $forumid) { // get subscribed forumids if ($forumid === 'subscribed' and $vbulletin->userinfo['userid'] != 0) { DEVDEBUG("Querying subscribed forums for " . $vbulletin->userinfo['username']); $sforums = $vbulletin->db->query_read_slave("\n\t\t\t\tSELECT forumid FROM " . TABLE_PREFIX . "subscribeforum\n\t\t\t\tWHERE userid = " . $vbulletin->userinfo['userid']); if ($vbulletin->db->num_rows($sforums) == 0) { // no subscribed forums eval(standard_error(fetch_error('not_subscribed_to_any_forums'))); } while ($sforum = $vbulletin->db->fetch_array($sforums)) { $forumids["{$sforum['forumid']}"] .= $sforum['forumid']; } unset($sforum); $vbulletin->db->free_result($sforums); } else { $forumid = intval($forumid); if (isset($vbulletin->forumcache["{$forumid}"]) and $vbulletin->forumcache["{$forumid}"]['link'] == '') { $forumids["{$forumid}"] = $forumid; } } } // now if there are any forumids we have to query, work out their child forums if (empty($forumids)) { $forumchoice = array(); $display['forums'] = array(); } else { // set $forumchoice to show the returned forumids #$forumchoice = implode(',', $forumids); // put current forumids into the display table $display['forums'] = $forumids; // get child forums of selected forums if ($childforums) { require_once DIR . '/includes/functions_misc.php'; foreach ($forumids as $forumid) { $children = fetch_child_forums($forumid, 'ARRAY'); if (!empty($children)) { foreach ($children as $childid) { $forumids["{$childid}"] = $childid; } } unset($children); } } } // return the array of forumids return $forumids; }
$permission = 'canmoderateposts'; if (!can_moderate(0, 'canmoderateposts')) { print_no_permission(); } $postselect = ''; $postjoin = ''; $postfrom = "FROM " . TABLE_PREFIX . "moderation AS moderation\n\t\tINNER JOIN " . TABLE_PREFIX . "post AS post ON (moderation.primaryid = post.postid)"; $posttype = 'reply'; } if ($vbulletin->options['threadmarking']) { cache_ordered_forums(1); } $modforums = array(); if ($forumid) { require_once DIR . '/includes/functions_misc.php'; $forums = fetch_child_forums($forumid, 'ARRAY'); $forums[] = $forumid; $forums = array_flip($forums); } else { $forums = $vbulletin->forumcache; } foreach ($forums as $mforumid => $null) { $forumperms = $vbulletin->userinfo['forumpermissions']["{$mforumid}"]; if (can_moderate($mforumid, $permission) and $forumperms & $vbulletin->bf_ugp_forumpermissions['canview']) { $modforums[] = $mforumid; } } if (empty($modforums)) { print_no_permission(); } $forumjumpbits = construct_mod_forum_jump(-1, $forumid, '', $permission);
/** * Marks a forum, its child forums and all contained posts as read * * @param integer Forum ID to be marked as read - leave blank to mark all forums as read * * @return array Array of affected forum IDs */ function mark_forums_read($forumid = false) { global $vbulletin; $db =& $vbulletin->db; $return_url = $vbulletin->options['forumhome'] . '.php' . $vbulletin->session->vars['sessionurl_q']; $return_phrase = 'markread'; $return_forumids = array(); if (!$forumid) { if ($vbulletin->userinfo['userid']) { // init user data manager $userdata =& datamanager_init('User', $vbulletin, ERRTYPE_STANDARD); $userdata->set_existing($vbulletin->userinfo); $userdata->set('lastactivity', TIMENOW); $userdata->set('lastvisit', TIMENOW - 1); $userdata->save(); if ($vbulletin->options['threadmarking']) { $query = ''; foreach ($vbulletin->forumcache as $fid => $finfo) { // mark the forum and all child forums read $query .= ", ({$fid}, " . $vbulletin->userinfo['userid'] . ", " . TIMENOW . ")"; } if ($query) { $query = substr($query, 2); $db->query_write("\n\t\t\t\t\t\tREPLACE INTO " . TABLE_PREFIX . "forumread\n\t\t\t\t\t\t\t(forumid, userid, readtime)\n\t\t\t\t\t\tVALUES\n\t\t\t\t\t\t\t{$query}\n\t\t\t\t\t"); } } } else { vbsetcookie('lastvisit', TIMENOW); } $return_forumids = array_keys($vbulletin->forumcache); } else { // temp work around code, I need to find another way to mass set some values to the cookie $vbulletin->input->clean_gpc('c', COOKIE_PREFIX . 'forum_view', TYPE_STR); global $bb_cache_forum_view; $bb_cache_forum_view = @unserialize(convert_bbarray_cookie($vbulletin->GPC[COOKIE_PREFIX . 'forum_view'])); require_once DIR . '/includes/functions_misc.php'; $childforums = fetch_child_forums($forumid, 'ARRAY'); $return_forumids = $childforums; $return_forumids[] = $forumid; if ($vbulletin->options['threadmarking'] and $vbulletin->userinfo['userid']) { $query = "({$forumid}, " . $vbulletin->userinfo['userid'] . ", " . TIMENOW . ")"; foreach ($childforums as $child_forumid) { // mark the forum and all child forums read $query .= ", ({$child_forumid}, " . $vbulletin->userinfo['userid'] . ", " . TIMENOW . ")"; } $db->query_write("\n\t\t\t\tREPLACE INTO " . TABLE_PREFIX . "forumread\n\t\t\t\t\t(forumid, userid, readtime)\n\t\t\t\tVALUES\n\t\t\t\t\t{$query}\n\t\t\t"); require_once DIR . '/includes/functions_bigthree.php'; $foruminfo = fetch_foruminfo($forumid); $parent_marks = mark_forum_read($foruminfo, $vbulletin->userinfo['userid'], TIMENOW); if (is_array($parent_marks)) { $return_forumids = array_unique(array_merge($return_forumids, $parent_marks)); } } else { foreach ($childforums as $child_forumid) { // mark the forum and all child forums read $bb_cache_forum_view["{$child_forumid}"] = TIMENOW; } set_bbarray_cookie('forum_view', $forumid, TIMENOW); } if ($vbulletin->forumcache["{$forumid}"]['parentid'] == -1) { $return_url = $vbulletin->options['forumhome'] . '.php' . $vbulletin->session->vars['sessionurl_q']; } else { $return_url = 'forumdisplay.php?' . $vbulletin->session->vars['sessionurl'] . 'f=' . $vbulletin->forumcache["{$forumid}"]['parentid']; } $return_phrase = 'markread_single'; } return array('url' => $return_url, 'phrase' => $return_phrase, 'forumids' => $return_forumids); }
} else { if ($vbulletin->GPC['find'] == 'lastposter' and $foruminfo['forumid']) { $_permsgetter_ = 'lastposter fperms'; $forumperms = fetch_permissions($foruminfo['forumid']); if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canview'])) { print_no_permission(); } 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'] . ')'; } else { $tachyjoin = ''; } // check if there is a forum password and if so, ensure the user has it set verify_forum_password($foruminfo['forumid'], $foruminfo['password']); require_once DIR . '/includes/functions_misc.php'; $forumslist = $forumid . ',' . fetch_child_forums($foruminfo['forumid']); require_once DIR . '/includes/functions_bigthree.php'; // this isn't including moderator checks, because the last post checks don't either if ($coventry = fetch_coventry('string')) { $globalignore_post = "AND post.userid NOT IN ({$coventry})"; $globalignore_thread = "AND thread.postuserid NOT IN ({$coventry})"; } else { $globalignore_post = ''; $globalignore_thread = ''; } cache_ordered_forums(1); $datecutoff = $vbulletin->forumcache["{$foruminfo['forumid']}"]['lastpost'] - 30; $thread = $db->query_first_slave("\n\t\tSELECT thread.threadid\n\t\t\t" . ($tachyjoin ? ', IF(tachythreadpost.lastpost > thread.lastpost, tachythreadpost.lastpost, thread.lastpost) AS lastpost' : '') . "\n\t\tFROM " . TABLE_PREFIX . "thread AS thread\n\t\t{$tachyjoin}\n\t\tWHERE thread.forumid IN ({$forumslist})\n\t\t\tAND thread.visible = 1\n\t\t\tAND thread.sticky IN (0,1)\n\t\t\tAND thread.open <> 10\n\t\t\t" . (!$tachyjoin ? "AND lastpost > {$datecutoff}" : '') . "\n\t\t\t{$globalignore_thread}\n\t\tORDER BY lastpost DESC\n\t\tLIMIT 1\n\t"); if (!$thread) { eval(standard_error(fetch_error('invalidid', $vbphrase['user'], $vbulletin->options['contactuslink']))); }