|
Subforum read/unread inconsistencies [R]
|
|
11-10-2008, 01:52 AM
(This post was last modified: 06-25-2009 05:43 PM by Ryan Gordon.)
Post: #1
|
|||
|
|||
|
This bug was reported before several times but disregarded:
http://community.mybboard.net/thread-39298.html http://community.mybboard.net/thread-35271.html I'm reopening this bug because I believe I found more issues related to it as well as a way to fix the issues. My findings are all with MyBB 1.4.3 and they're all related to read / unread status of a forum that has one or more subforums and maybe even subsubforums. This issue is quite complex and I'm sorry for making a mess here. There are at least three issues: 1) Parent forum gets marked as 'unread' even though there is nothing new in it. This happens if you post something in a subforum and your post is the latest posting in the parent forum. MyBB compared latest posting time against the time the parent forum was last read. If you read the subforum but not the parent forum the parent forum shows up as new. 2) Parent forum is marked as 'read' even though there is a subforum with unread postings in it. This happens when the latest posting is read but another posting in another sibling subforum is not read. 3) When clicking 'mark forum as read' it does not mark (all) subforums as read. I have not investigated closer as to why that is yet but it's annoying after you fix 1) and 2) since then you can mark a forum as read, reload, and it's (correctly) unread again because the subforums didn't get marked as read. A possible fourth issue is actually a feature request. 4) when unread / read markers work properly for subforums it would be nice to show those first in the forum list and not show 2 read subforums and have the unread subforums be grouped under "7 others". What follows is my take at issues 1) and 2). The issue is located in inc/features_forumlist.php functions build_forumbits() and get_forum_lightbulb(). build_forumbits() traverses through a forum and all its subforums, looking for the latest post. The purpose of this is mainly to be able to display the last post and author and time in the right column of the forum in the standard theme. Once the latest post is found, build_forumbits() passes it on to get_forum_lightbulb(). get_forum_lightbulb() uses the latest post and compares it with the users last read time of the forum. Depending on the result it will return a lightbulb in "on" state (unread) or "off" state (read). This logic works fine for flat forum structures - the last post is newer than your last read time, the forum is unread, the last post is older than your read time, the forum is read. This logic does not work for subforums, as it's perfectly possible to read the last post of a subforum without reading other new posts in the parent forum (and by doing so the parent forum gets marked as read too even though there are new unread postings in it). As well as the other way around, you can read the latest post in a subforum but because it uses the same latest post in the parent forum, it marks it as new even though it's already read. In order to do it correctly, the get_forum_lightbulb() has to consider the last post directly in a forum, and not a newer last post of one of its subforums. At the same time, if a subforum is unread, the parent forum has to inherit the unread state too. This change can be implemented at almost no additional CPU cost, because the code already collects all the information necessary and recurses through the forums, and compares the last post of each forum with the last post of the subforums in order to find the latest last post. In other words the information we need is already obtained by the current code but then ditched in favour of another subforums latest post. Here are the changes I made to implement the new logic. In my tests it seemed to work fine but the code itself is not very nice (I'm not a PHP programmer ... I'm sorry). I'm confident that the issues 1.) through 4.) can be solved but I'm not confident in my code, it may still be buggy. ![]() Diff: PHP Code: --- original/mybb_1403.zip.dir/Upload/inc/functions_forumlist.php 2008-10-28 02:37:26.000000000 +0100Full code: PHP Code: /**Google SEO | Gravatar | Hooks | HTMLPurifier | Overview | Patches | PluginLibrary |
|||
|
11-10-2008, 01:56 AM
Post: #2
|
|||
|
|||
|
RE: [B] Subforum read/unread inconsistencies
We don't read any farther into it because it would be too processor intensive. That is why this is being marked a bogus and the other one was too.
This was identified in alpha builds of MyBB 1.4's development. There just isn't a way to fix all these issues without causing others and in a non-intensive way on the server. |
|||
|
11-10-2008, 02:04 AM
Post: #3
|
|||
|
|||
RE: [B] Subforum read/unread inconsistencies
(11-10-2008 01:56 AM)Ryan Gordon Wrote: We don't read any farther into it because it would be too processor intensive. I find that hard to believe. The changes I made do not change CPU load - the forums are already traversed recursively by the current implementation and all my change does is actually use the information that is obtained this way. And the other issues are issues even present without fixing the read / unread state properly - it would be nice (and cost virtually nothing) to mark all subforums read when I mark a forum as read and put unread subforums first in the overview (if done right, also at next to nothing cost). I don't care wether or not you fix this as I don't plan on using Subforums much either way. It's just an issue that came up while evaluating MyBB for our purposes (small multi lingual forums). I guess MyBB has bigger forums who would like a proper subforum handling. It's a shame to not fix something when a good way to fix it exists (and I'm not talking about my code here, the idea should be implemented by a more experienced PHP programmer). Google SEO | Gravatar | Hooks | HTMLPurifier | Overview | Patches | PluginLibrary |
|||
|
11-10-2008, 02:08 AM
(This post was last modified: 11-10-2008 02:09 AM by Ryan Gordon.)
Post: #4
|
|||
|
|||
|
RE: Subforum read/unread inconsistencies
I haven't looked into your fix yet but the tracking system for this is a lot more complex then what I think you understand of it.
I am all up for fixing it if there is a good fix but it doesn't seem like your fix is a proper one. |
|||
|
11-10-2008, 02:27 AM
Post: #5
|
|||
|
|||
|
RE: Subforum read/unread inconsistencies
My fix definitely isn't a good one in terms of the code I write - I'm a programmer but not a PHP programmer - and I only did minimal modifications to the existing function just to see wether or not it's possible to fix at all - and as a result there is a bit of awkward variable handling there - but I think it is possible to fix the subforum read/unread handling.
My code is intended to be more of like a 'proof of concept', of course it's possible that I overlooked something and it doesn't work at all after all, in which case I'd like to be proven otherwise, i.e. a comment why the approach can't work instead of just "too much CPU" would be nice. If the idea works, there is lots of room for optimization regarding the implementation. It can be rewritten in a way that goes better with the idea of looking at the top post of each forum instead of the very latest subforum post. Google SEO | Gravatar | Hooks | HTMLPurifier | Overview | Patches | PluginLibrary |
|||
|
11-10-2008, 02:31 AM
Post: #6
|
|||
|
|||
RE: Subforum read/unread inconsistencies
(11-10-2008 02:27 AM)frostschutz Wrote: My code is intended to be more of like a 'proof of concept', of course it's possible that I overlooked something and it doesn't work at all after all, in which case I'd like to be proven otherwise, i.e. a comment why the approach can't work instead of just "too much CPU" would be nice. I would except most of us just don't have the time these days. |
|||
|
11-10-2008, 05:36 PM
Post: #7
|
|||
|
|||
|
RE: Subforum read/unread inconsistencies
Ok, with some further tests, I found out that my proposal is incomplete.
What the current logic does to mark a forum as 'on' / new: - determine the last post of the parent forum - for each subforum, if the subforums last post is newer, use the subforums last post instead - when lastpost timestamp > users forumsread timestamp, the forum bulb is 'on' Problem: When the subforums users forumsread timestamp > lastpost timestamp (i.e. the post is read in the subforum), yet the parent forum gets marked as unread if the parent forums users forumsread is < lastpost timestamp. You can't simply mark it as 'off' when the subforum is read though as there may be other new posts in another subforum or the parent forum itself. The my logic I tried to implement marks a forum as 'on' / new when: - the lastpost timestamp > users forumsread timestamp (so far identical to the old, it works as long as there is no subforum) - or when a subforum is marked as 'on' My intention here was that this way, you would get a path of bulbs that are 'on', so for example if the Subsubsubsubforum #47 is on, the Parent forum, subforum #4, subsubforum #13, etc. would all be on too, leading you to the forum that contains the new posting, i.e. * Parent > * Subforum > * Subsubforum etc. and once you'd seen the new posting in Subsubsubforum #47 the bulbs would all be off (if there are no other 'on' subforums). This is consistent behaviour but for it to work completely, the 'mark forum as read' function would have to be changed in a way that also marks all subforums as read. This isn't necessary with the old logic, i.e. the old logic allows marking the parent forum as read (which just sets the timestamp for the parent forum), while bulbs in subforums stay 'on'. In my logic that does not work because the parent forum gets marked as 'on' when a sub forum is marked as 'on'. Personally I don't think it's a good idea to mark a parent forum as 'off' when a subforum is still 'on' because the user may forget about new postings in a subforum he has yet to read. On the other hand, a user may choose not to read a subforum because he's not interested in the topics discussed there, so by reading the parent forum he sees that the subforum is new, doesn't read those but wants to have the parent forum marked as read anyway. This behaviour does not make sense in a news system but it may be necessary for forums, since users can not 'unsubscribe' from a subforum that they do not wish to read. To implement this I have to refine my logic a little. Mark the forum as 'on' when: - the lastpost timestamp > users forumsread timestamp - or when a subforum is marked as 'on' AND the 'on' timestamp > users forumsread timestamp It would be possible to make the behaviour optional, i.e. mark forums as 'on' if a subforum is 'on' and the mark as read marks all subforums as read too, or mark forums as 'on' if a subforum is 'on' with a newer timestamp, and do not mark subforums as read. I'll implement this and see how it goes.
Google SEO | Gravatar | Hooks | HTMLPurifier | Overview | Patches | PluginLibrary |
|||
|
11-12-2008, 02:22 AM
(This post was last modified: 11-16-2008 09:30 PM by frostschutz.)
Post: #8
|
|||
|
|||
|
RE: Subforum read/unread inconsistencies [R]
I decided to make my changes in a plugin. It's easier to handle than a patch (that windows users usually don't know how to apply), and if I make my idea available as a plugin, maybe it will attract some users to test it thoroughly just to see wether it can work properly at all or not.
Plugin thread is here: http://community.mybboard.net/thread-40381.html The plugin version 0.3 now does by default nothing except fix the bug mentioned here. Advanced features (icons, sorting) are entirely optional and must be enabled first. I think that's as much effort as I'll put in this for now. If someone reports a bug regarding the plugin, I'll fix it. So far no one reported back but very few people downloaded the file in total. Plugin is still awaiting validation on the mods site. Google SEO | Gravatar | Hooks | HTMLPurifier | Overview | Patches | PluginLibrary |
|||
|
11-18-2008, 10:25 AM
Post: #9
|
|||
|
|||
|
RE: Subforum read/unread inconsistencies [R]
thx that someone does an work on it i will try your plugin because i also dont like it how it is handled right now
|
|||
|
12-09-2008, 07:01 PM
Post: #10
|
|||
|
|||
|
RE: Subforum read/unread inconsistencies [R]
And it will be fix?
|
|||
|
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 1 Guest(s)
Search
Member List
Calendar
Help



