This has been bugging me for a while. Currently when you mark all forums as read, it uses the current timestamp that you accessed the page. This is not good when you're marking the forums read after you've just viewed the "What's New?" if it has more than one page. If it takes you 30 minutes to view all the threads on the first page and then navigate to the second page, your timestamp will now change to the timestamp of accessing that second page. If you now click mark all forums read, you'll also be marking threads as read that were posted within the last 30 minutes that you didn't see or read and not realize it. Actually this can happen even if your what's new page only consists of one page. Assuming the user clicks mark all forums as read on the what's new page, they'll be fine, but not if they click it on another page since it'll take the timestamp of the newer accessed page.
One way to deal with this might be that after you've gone through a few pages of what's new and read all the threads you want, don't click mark forums as read yet, but rather click what's new again and see if there is anything that was posted within the time it took you to read those threads. Then clicking mark forums as read at this point will not result in you missing any recently posts assuming you're clicking mark forums as read from the what's new page instead of other pages such as a thread page. That is what I do. Another way may be to open a new tab for the additional pages of what's new and keep the original first page (or any other page) open then click mark forums as read on the original page you left open. In both cases it's always a bit of a hassle to do this though. Not to mention, not everybody knows to do this. For those who want to make sure they've read everything, there are probably users who have not knowingly missed certain posts due to this situation.
Maybe when the user clicks mark all forums read, you first look up the `xf_search` table and check if there is a `search_type` of new-threads for that `user_id` and use the timestamp of the newest `search_date` column as the timestamp. If it doesn't exist then fallback to using the timestamp originally provided in the query string? Although the what's new data is not cleared out immediately, so there would need to be an indicator after the forums have been marked as read...
Actually after thinking about this a bit more, this might not make sense, depending on how some people use mark forums as read. It's possible some users may click what's new, check out the threads, but not click mark all forums read. After they may still navigate around the forum and see a new thread that was created after they viewed what's new. At that point let's say the title of the thread doesn't interest the user, so they don't click it and now click mark all forums as read. Since this user has a what's new search result with an older timestamp this thread would not be marked as read and the user may be confused as to why it didn't mark as read.
Another case may be (depending on how long the new-thread search result is stored) a user may view what's new, not click mark all forums read, come back in a few days without clicking what's new and then click mark all forums read. They would still have all the posts from the last few days in their what's new. Not sure if anyone does that, but it could be possible.
Maybe a better solution would be to have the newest `search_date` timestamp carried across all the pages on the what's new while regular forum pages would just use the current timestamp of accessing that page. This would fix weird situations like the above, but doing it this way, the user still needs to ensure they click mark all forums read from the what's new page instead of any random forum page if they don't want to miss any posts.