The code to mark a forum read VS the code to mark all forums read. Not sure where the problem lies in the first one that the second ensures that works.
* Mark a particular forum as read. * * @param int The forum ID */ function mark_forum_read($fid) { global $mybb, $db; // Can only do "true" tracking for registered users if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid']) { // Experimental setting to mark parent forums as read $forums_to_read = array(); if($mybb->settings['readparentforums']) { $ignored_forums = array(); $forums = array_reverse(explode(",", get_parent_list($fid))); unset($forums[0]); if(!empty($forums)) { $ignored_forums[] = $fid; foreach($forums as $forum) { $fids = array($forum); $ignored_forums[] = $forum; $children = explode(",", get_parent_list($forum)); foreach($children as $child) { if(in_array($child, $ignored_forums)) { continue; } $fids[] = $child; $ignored_forums[] = $child; } if(fetch_unread_count(implode(",", $fids)) == 0) { $forums_to_read[] = $forum; } } } } switch($db->type) { case "pgsql": case "sqlite": add_shutdown(array($db, "replace_query"), array("forumsread", array('fid' => $fid, 'uid' => $mybb->user['uid'], 'dateline' => TIME_NOW), array("fid", "uid"))); if(!empty($forums_to_read)) { foreach($forums_to_read as $forum) { add_shutdown(array($db, "replace_query"), array("forumsread", array('fid' => $forum, 'uid' => $mybb->user['uid'], 'dateline' => TIME_NOW), array('fid', 'uid'))); } } break; default: $child_sql = ''; if(!empty($forums_to_read)) { foreach($forums_to_read as $forum) { $child_sql .= ", ('{$forum}', '{$mybb->user['uid']}', '".TIME_NOW."')"; } } $db->shutdown_query(" REPLACE INTO ".TABLE_PREFIX."forumsread (fid, uid, dateline) VALUES('{$fid}', '{$mybb->user['uid']}', '".TIME_NOW."'){$child_sql} "); } // START - Unread posts MOD $forums_to_read[] = $fid; $fids = implode(',', $forums_to_read); $db->query("DELETE TTR.* FROM " . TABLE_PREFIX . "threadsread AS TTR INNER JOIN " . TABLE_PREFIX . "threads AS TT ON TT.tid = TTR.tid WHERE TTR.uid = '" . $mybb->user['uid'] . "' AND TT.fid IN (" . $fids . ")"); // END - Unread posts MOD } // Mark in a cookie else { my_set_array_cookie("forumread", $fid, TIME_NOW, -1); } }
/** * Marks all forums as read. * */ function mark_all_forums_read() { global $mybb, $db, $cache; // Can only do "true" tracking for registered users if($mybb->user['uid'] > 0) { $db->update_query("users", array('lastvisit' => TIME_NOW), "uid='".$mybb->user['uid']."'"); require_once MYBB_ROOT."inc/functions_user.php"; update_pm_count('', 2); if($mybb->settings['threadreadcut'] > 0) { // Need to loop through all forums and mark them as read $forums = $cache->read('forums'); $update_count = ceil(count($forums)/20); if($update_count < 15) { $update_count = 15; } $mark_query = ''; $done = 0; foreach(array_keys($forums) as $fid) { switch($db->type) { case "pgsql": case "sqlite": $mark_query[] = array('fid' => $fid, 'uid' => $mybb->user['uid'], 'dateline' => TIME_NOW); break; default: if($mark_query != '') { $mark_query .= ','; } $mark_query .= "('{$fid}', '{$mybb->user['uid']}', '".TIME_NOW."')"; } ++$done; // Only do this in loops of $update_count, save query time if($done % $update_count) { switch($db->type) { case "pgsql": case "sqlite": foreach($mark_query as $replace_query) { add_shutdown(array($db, "replace_query"), array("forumsread", $replace_query, array("fid", "uid"))); } $mark_query = array(); break; default: $db->shutdown_query(" REPLACE INTO ".TABLE_PREFIX."forumsread (fid, uid, dateline) VALUES {$mark_query} "); $mark_query = ''; } } } if($mark_query != '') { switch($db->type) { case "pgsql": case "sqlite": foreach($mark_query as $replace_query) { add_shutdown(array($db, "replace_query"), array("forumsread", $replace_query, array("fid", "uid"))); } break; default: $db->shutdown_query(" REPLACE INTO ".TABLE_PREFIX."forumsread (fid, uid, dateline) VALUES {$mark_query} "); } } } } else { my_setcookie("mybb[readallforums]", 1); my_setcookie("mybb[lastvisit]", TIME_NOW); my_unsetcookie("mybb[threadread]"); my_unsetcookie("mybb[forumread]"); } }
Recommended Tutorials: