PDA

View Full Version : Release 0.1 Mark Forum Read/Mark All Read from database hack



ethank
Fri 4th May '01, 9:48pm
Here's the hack I worked on this week, in rough and not too pretty form. I'll be beautifying it soon.

You can download an rtf with all the code changes listed at http://murmurs.com/codechanges.rtf. Also in that file is the table creation statement.

Attached is a zip of all the changed files. Comments are included, but not consistant yet.

You can see this in action at http://tony.murmurs.com. Only two forums, but still.

I'll pretty up the code this weekend and make better install instructions.

This is way beta, so if there are any problems just post. Don't put this on a production board yet

Ethan

Mike Sullivan
Fri 4th May '01, 10:03pm
ethank,

I had to remove your codechanges.zip file because it is in violation of the licensing agreement -- you may not post full files. You have to release them as instructions (or if you come up with a better way).

ethank
Fri 4th May '01, 10:06pm
Doh! OK. Well, the rtf has the changed code, not full source. I'll figure out a better way to indicate where the changed code should go.

Anyhow, look at the rtf, as that will give you most of what you need, although its not as clear as it should be yet.

EThan

ethank
Sat 5th May '01, 2:43am
Two more additions. These two blocks assure that people get an initial Mark Read entry in the database if they don't have one. Its set to 0:00AM for the day they enter without one.

This goes in the login method in member.php, before the URL portion:



// *** CODE ADDED BY ETHANK

$record_exists=$DB_site->query("select userid from markread where userid='$userid' AND forumid = '0'");
$num_records=$DB_site->num_rows($record_exists);
if($num_records<1)
{
$firsttime=mktime(0,0,0);
$DB_site->query("INSERT INTO markread (readtime, userid, forumid) VALUES ('$firsttime','$userid', '0')");
}
// END ADD


And this goes in register.php, after the initial databse insert after the Start Add Member comment. This goes right before the big insert method...:




// *** ADDED BY ETHANK
// Create Unix time for midnight...
$firsttime=mktime(0,0,0);

$DB_site->query("INSERT INTO markread (readtime, userid, forumid) VALUES ('$firsttime','$userid', '0')");


// END ADD

Onslo
Sat 5th May '01, 10:19am
One general inprovement that would be usefull (in general) for VBulletin.

If the link that marks read contained a timestamp of the time when you displayed the page, then anything posted after you read that page would still show as unread.

For instance.....

If you display the page at 12:00 ..
then sit there for an hour ..
then press Mark Read ..
anything posted after 12:00 will still be shown as unread.

The way that VB does it is it marks stuff as read from the moment that you hit the link, so there is a possiblity that you could miss postings made inbetween the period of actually displaying the page and hitting the read link.

Onslo

ethank
Sat 5th May '01, 1:39pm
Originally posted by Onslo
One general inprovement that would be usefull (in general) for VBulletin.

If the link that marks read contained a timestamp of the time when you displayed the page, then anything posted after you read that page would still show as unread.

For instance.....

If you display the page at 12:00 ..
then sit there for an hour ..
then press Mark Read ..
anything posted after 12:00 will still be shown as unread.

The way that VB does it is it marks stuff as read from the moment that you hit the link, so there is a possiblity that you could miss postings made inbetween the period of actually displaying the page and hitting the read link.

Onslo

That happened with Webboard too.. I guess the way we could do it is set a timestamp in a cookie on page load, then when they mark read, use that instead of the time they click the Mark Read. Maybe have it as an option?

The other bug I found was that if you mark a child forum read, the parent forums still are flagged "new" cause they just look at the "lastpost" from all their children. I need to have it make sure that that last post wasn't in a forum that was marked read, and if it was look at the second to the last post, etc. I'll work on that bug tonight.

EThan

Onslo
Mon 7th May '01, 11:36am
Hows it coming Ethan? :)

Onslo

ethank
Mon 7th May '01, 12:25pm
I wasn't home all weekend so didn't have a chance to compile it all. I'll be working on it today as well as doing one last bug fix. There's a weird thing with subconferences....

Ethan

ethank
Sat 19th May '01, 6:29pm
I'm back from Georgia and seeing as how final is being released Monday, I'll post an updated instructions document and the current iteration of the hack here on Tuesday (hopefully)!

Thanks for your patience.

EThan

Onslo
Sun 20th May '01, 4:00am
Excellent! :)

I await your masterpiece.

Top sport Ethan :)

Onslo

Onslo
Wed 23rd May '01, 1:07pm
In the process of setting up a test board so we can test this hack. Hope everything ok Ethan.

Let me know when it's done.

Can email me here :

onslo@worldmailer.com

Ta!

Onslo

ethank
Wed 23rd May '01, 1:30pm
Originally posted by Onslo
In the process of setting up a test board so we can test this hack. Hope everything ok Ethan.

Let me know when it's done.

Can email me here :

onslo@worldmailer.com

Ta!

Onslo

I successfully implemented it on the release version, but I still have some bugs and things I need to fix that just popped up. The most challenging is that damn "new post" indicator when dealing with subconferences. I'm heading home tonight to work on it.

Anyhow, I'll e-mail you later.

EThan

Onslo
Wed 6th Jun '01, 1:16pm
Hi Ethan,

Have you tried emailing me? My inbox was full and so it may not have got through. It's clear again now :)

Any news?

Regards

Onslo

ethank
Sun 10th Jun '01, 3:17am
I just finished the first document of code changes based on my comparison between the 2.0 release and the modified code I'm running using a DIFF type tool.

I'll do the same for 2.0.1 this week. Here's the preliminary change list. Don't use it yet, cause I haven't had a chance to test it using a fresh copy of 2.0.1 yet.

But at least you get a preview. Please forgive any sloppy code, as I learned PHP while doing this.

Also, template changes are coming, but they are pretty self explanatory when you dig into the code. You can also see them on my boards at http://tony.murmurs.com

You can see the HTML documentation (since I can't upload it) at:

http://tony.murmurs.com/attachment.php?postid=21438

EThan

ethank
Tue 19th Jun '01, 2:09am
Originally posted by ethank
I just finished the first document of code changes based on my comparison between the 2.0 release and the modified code I'm running using a DIFF type tool.

I'll do the same for 2.0.1 this week. Here's the preliminary change list. Don't use it yet, cause I haven't had a chance to test it using a fresh copy of 2.0.1 yet.

But at least you get a preview. Please forgive any sloppy code, as I learned PHP while doing this.

Also, template changes are coming, but they are pretty self explanatory when you dig into the code. You can also see them on my boards at http://tony.murmurs.com

You can see the HTML documentation (since I can't upload it) at:

http://tony.murmurs.com/attachment.php?postid=21438

EThan

I have the change list updated for 2.0.1, but I graduated college this weekend so I didn't get to it. Might get to it tommorow.

Sorry for the delay everyone and thanks for your patience.

EThan

isman
Sat 23rd Jun '01, 3:51pm
Can't wait for that code ethank. Let us know when you have the changes complete and documented.

airco
Mon 25th Jun '01, 3:35pm
congrattzz for graduating dude!!!

xandelwyn
Thu 30th Aug '01, 7:49pm
Does this exist somewhere?

Can't find any recent references to it , and the original link still says not to use until it has been doublechecked.

Anyone using this code?

Thanks much,

-Malek

ethank
Thu 30th Aug '01, 10:18pm
I'm using it at Murmurs.com. The hack is extensive, and I haven't yet had a chance to document it :(

Let me go back and look at how extensive it really is and I'll see if I can get some code together.

Ethan

Christine
Tue 4th Sep '01, 9:31pm
Ooh - me too.

I am another Ezboard refugee that really wants this functionality working!

:D

TripleH
Sat 15th Sep '01, 6:23am
Any sign of when the code is going to be released?


HHH

ethank
Sat 15th Sep '01, 1:19pm
Originally posted by TripleH
Any sign of when the code is going to be released?


HHH

Well, I plan on doing some hacking this weekend in vBulletin, so I think I'll break out Araxis Merge and try to ducment the code changes needed.

I had instructions done using line numbers, but I can't do that anymore, so what is the typical way of saying "put this here?"

Ethan

TripleH
Sat 15th Sep '01, 4:47pm
as far as i know... usually you find the thing that is right above it.. then say

Right below this... Put this... etc..

HHH

Christine
Sat 15th Sep '01, 4:57pm
Really looking forward to testing this baby out, Ethan!

Afterburner
Sun 16th Sep '01, 5:24am
Can somebody make a LOOK FOR THIS CODE AND ADD BELOW THIS CODE instruction ? I made a lot of modifications in my board and cant follow this line number instruction.

BTW its a great hack

Suggestion:

I think it will be better if you visit a board the icon will be set automatically to "been red" like if you read a topic

Karas
Sun 16th Sep '01, 12:03pm
I cant WAIT for this...as someone else said...I'm an ezboard refugee also...and my crew has been calling for something like this...glad to see someone has the know how:)

Looking forward to it!

Zeoran
Wed 10th Oct '01, 4:48pm
Another Ez-board migrater who is DYING to get this feature back!

Thanks for all your hard work!

Martz
Wed 10th Oct '01, 7:49pm
Yup, plenty of us :)

Karas
Mon 15th Oct '01, 3:14am
Would hate to see this one get lost in the quagmire.../drool...heh

Christine
Tue 23rd Oct '01, 3:02pm
Hows it going Ethan?

ethank
Wed 24th Oct '01, 9:01pm
Busy as all hell! Story is, I kind of quit/was layed off, so I'm doing consulting and grad school admissions stuff so just got really swamped.

I'm going to diff my files against the released ones and see if I can get some documentation going.

I guess I'll use the installation wizard type thing that others use for hack distribution.

I don't have a timeline honestly, because right when I start working on doing all the documentation I get busy again. Erg.

Ethan

Christine
Wed 24th Oct '01, 10:13pm
You too, aye? Been doing the consulting thing for 2 years ever since a layoff. It has two speeds - fifth gear and park.

Hang in there. :)

Looking forward to seeing what you have come up with.

:D

ethank
Thu 25th Oct '01, 1:59am
Here it is at long last. I went through in Araxis Merge, comparing my current code base to the released one and here are the instructions :)

This is preliminary. I need a brave soul with time to implement it and test it out, see if I forgot anything. This was my first PHP project, so the code is a bit sloppy in parts.

But its all there and its worked in production for 5 months on a 1500-3000 message per day forum.

If someone walks through it and it works, I'll start making a sort of install script type thing for it to make it nicer in format.

10:31PM PST on 10/24/2001 Fixed vague instructions in showthread.php code
11:04PM PST Changed instructions in session.php modification
11:17 PST Missing a }, caused parse error in index.php
October 28, 2001 Removed updateLocation() function calls, clarified sessions.php instructions a bit.

Yet to be done: Cleaning up the code a bit.

Ethan

Christine
Thu 25th Oct '01, 10:25pm
I shall be thy guinea pig. :)

Only problem is, it may take me a day or more to begin. My new host provider didn't get the test region database set up when he set up production. It is there now, but I can't access it through phpMyAdmin for some unknown reason.

Blah.

As soon as I can access to script, I will run this for you and let you know how it reacts for me.

If you have any idea what may be wrong with the PhpMyAdmin thing, let me know that as well. They don't have any idea how to fix it and I don't know enough about it to try to suggest anything.

http://www.vbulletin.com/forum/showthread.php?s=&threadid=31338

JJR512
Thu 25th Oct '01, 11:09pm
I already went through this last night, with ethank standing by on AIM for support with a few bits of the original instructions that weren't quite clear. But as we worked it all out, he made changes to the text file, so what's attached in his message above should be good. I'm happy to report that the functionality of the hack seems to work just fine. :) There are one or two minor rough edges that I don't know if were addressed yet, for example the Moderators column gets used to hold the links to mark the forum read or get new posts in that forum, but the instructions don't mention to change the name of the column. You can probably figure that out on your own, but I think it should be in there. There was one other issue about templates...when you click the link to mark a forum read, it sends you through the same redirection as if you'd marked all forums as read. So you see the message that all forums have been marked read. Ethank suggested I change the wording of that template to be that the one forum had been marked as read, but then it would say that if you used the mark all forums read link. So there really should be a new template created that is called when you just mark an individual forum as read. I think that ethank is considering putting that in a later release along with some other stuff, although he can comment on that better than I.

SWFans.net
Thu 25th Oct '01, 11:30pm
The hack seems to have installed alright and not be causing any database errors, but there are a couple of issues I'd like to try and see if there are solutions for.

The getall action for viewing New Posts doesn't seem to be working. It yields this error:
Fatal error: Call to undefined function: updatelocation() in /home/virtual/swforum/home/httpd/html/forum/search.php on line 1091I found the instructions for modifying search.php to be a little lacking in detail and confusing.

And is it possible to have it when a user clicks on the Mark forum Read Link within a forum, to have them directed to the Forum Home Page?

Also, the hack appears to actually be marking all forums read, when clicking Mark forum read. =/

ethank
Thu 25th Oct '01, 11:58pm
Originally posted by SWFans.net
The hack seems to have installed alright and not be causing any database errors, but there are a couple of issues I'd like to try and see if there are solutions for.

The getall action for viewing New Posts doesn't seem to be working. It yields this error:I found the instructions for modifying search.php to be a little lacking in detail and confusing.

And is it possible to have it when a user clicks on the Mark forum Read Link within a forum, to have them directed to the Forum Home Page?

Also, the hack appears to actually be marking all forums read, when clicking Mark forum read. =/

Need to remove the updateLocation function call.

I'll fix instructions for the search page. THe "Mark Forum read" link should look something like this:

http://tony.murmurs.com/member.php?action=markforumread&forumid=96

I'll take a look at the instructions and post updates.

Ethan

SWFans.net
Fri 26th Oct '01, 12:05am
Yes, I was aware that the redirect looked that way, but the actual function appears to be marking all forums read. Perhaps removing the “updateLocation function call.” Will solve that issue.

Now if I just new how to do that.

Is clueless when it come to coding PHP. :confused:

ethank
Fri 26th Oct '01, 12:09am
Just delete the line or put a // before it

EThan

SWFans.net
Fri 26th Oct '01, 12:34am
Thanks. :) I have the "View New Posts" working again, but the feature, still marks all forums as read when I use the link provided in the instructions to Mark Forum Read.

ethank
Fri 26th Oct '01, 12:36am
Originally posted by SWFans.net
Thanks. :) I have the "View New Posts" working again, but the feature, still marks all forums as read when I use the link provided in the instructions to Mark Forum Read.

Hmmm...paste that link in here.

Ethan

SWFans.net
Fri 26th Oct '01, 12:41am
http://www.swforums.net/forum/


<a href="member.php?s=$session[sessionhash]&action=markforumread&forumid=$forum[forumid]">Mark Forum Read</a>

SWFans.net
Fri 26th Oct '01, 2:02am
I went through and redid the modifications to session.php and the hack is fully functional now. :)

Thanks for putting up with my questions and providing this excellent hack. :D

FWC
Fri 26th Oct '01, 2:14am
I think I know what I'm going to be doing this weekend. :)

ethank
Fri 26th Oct '01, 3:03am
I'm looking at the other version of hte Mark Read code as well. Looking at his code, its very similar to my implementation and the functionality should be similar. The only difference is the search code and the code that does the forum lightbulbs (mine checks subforums individually instead of going by last-post because last-post gives inconsistent results).

I contacted the author of the other one, so maybe we can just combine efforts and distrubte one persistent mark-forum-read hack instead of having two.

Its not a hurry because this one at least works and has for a while, even if it is a bit sloppy in parts :)

Thank god for Araxis Merge! It makes this all so easy :p

EThan

ethank
Fri 26th Oct '01, 3:03am
Originally posted by SWFans.net
I went through and redid the modifications to session.php and the hack is fully functional now. :)

Thanks for putting up with my questions and providing this excellent hack. :D

I'm glad it works :)

Ethan

JJR512
Fri 26th Oct '01, 2:22pm
After having and using this hack for a couple days now, an interesting idea for improving it has occurred to me. Why not make it automatic, so people don't have to click on any link to mark a forum as read. People don't have to do anything special to get a thread marked as read; why should they have to do anything special to get a forum marked as read? If all the new post indicators in a forum are off, the forum should automatically turn its own new post indicator off (in other words, mark itself as read).

I guess the way this would work is that whenever you view a page that has a forum list on it (forum home view, category view, forum with subforum view, etc.), the code would check to see if there are actually any new posts in any forums listed (in other words, check to see if you looked in the forum, would you see any new post folders?), and if not, the new post indicator for the forum would be off.

ethank
Sat 27th Oct '01, 2:54am
Well, judging from the new version of vBulletin, this hack might not be necessary. And that's cool!

:)

Ethan

JJR512
Sat 27th Oct '01, 3:10am
Well I'll be a monkey's uncle. I noticed the "Version 2.something ;-)" earlier, but hadn't noticed the new links. Cool! :)

tubedogg
Sat 27th Oct '01, 3:18am
Don't be so sure...a database version of this may be just what I need (this cookie thing hasn't been working too well for me thus far).

ethank
Sat 27th Oct '01, 1:15pm
Originally posted by tubedogg
Don't be so sure...a database version of this may be just what I need (this cookie thing hasn't been working too well for me thus far).

Ahh...so it is still using cookies!

Well then...ONWARD WITH THE PROGRAM! I shall merge the other version of this code with mine, polish it up, format a very nice document on how to install it and release it this weekend.

2.? looks might cool though, outside of forum read :)

Ethan

SWFans.net
Sat 27th Oct '01, 1:55pm
I'd like to say that one of the parts of ethank's hack that I appreciate, is the ability to have the mark individual forum read link on the forum index as well as within the specific forum. :)

I have always been a fan of redundancy and having options in more than one place.

Christine
Sat 27th Oct '01, 3:57pm
I too am getting the "mark all forums read" as a result of trying to mark them individually.

I see where SW posted that he was able to redo the session.php mods, but I am a bit confused.

From that file, we have (around line 342)

$bbuserinfo['lastvisit']=$bbuserinfo['lastactivity'];

And from line ~352, there is

$bbuserinfo['lastvisit']=$bbuserinfo['lastvisit'];

First, the instructions call to make the mods at the second instance of $bbuserinfo['lastvisit']=$bbuserinfo['lastactivity']; but I can only find the one case.

Secondly, there is an additional piece that is to be made at the $bbuserinfo['lastvisit']=$bbuserinfo['lastvisit']; but doesn't say which one - the one that Ethan added in the first group or the one that was there to begin with?

The remaining code (between 342 and 352) before modifications is
} else {
if (!isset($bypass)) {
if ($noshutdownfunc) {
$DB_site->query("UPDATE user SET lastactivity=".time()." WHERE userid='$bbuserinfo[userid]'");
} else {
$shutdownqueries[]="UPDATE user SET lastactivity=".time()." WHERE userid='$bbuserinfo[userid]'";
// This update will be done in the doshutdownfunction automatically, but the old method was doing screwy things!!
}

Where do these additions go in relation to that?

Christine
Sat 27th Oct '01, 8:12pm
Nevermind - I figured it out. Ethan - you need to update the instructions and clear up the sessions.php instructions to reflect one change instead of two.

We are testing this now - it appears to be working like a champ!

FWC
Sun 28th Oct '01, 12:44am
Originally posted by tubedogg
Don't be so sure...a database version of this may be just what I need (this cookie thing hasn't been working too well for me thus far). The cookie version has been a little flaky for me too, Tube. I think I'll go with Ethan's version once the new vB is out and the hack is done.

Trillian
Sun 28th Oct '01, 1:35pm
Weeeeeee! Can't wait to install this!

Thanks for taking the time to document it :)

ethank
Sun 28th Oct '01, 9:57pm
I updated the file to clarify sessions.php instructions and removed the updateLocation() code.

If anyone has any code/query improvements, just holler!

I tried to merge in the other one, but I figured this one works and why do more hacking than necessary? So anyhow....

Ethan

Christine
Mon 29th Oct '01, 11:14am
Ethan - my hat is off to ya! I will be moving this into production today. :D

Here are some additional notes for the optional template section - changing the column header and the wording of the redirect screen.

in forumdisplay/forumdisplay_forumslist and
Forumhome/forumhome

Replace Moderator with Functions (or whatever tag you choose)

in redirection/redirect_markread

Replace with:
The forum(s) you have selected have been marked as read and the new post indicators will now be off.

ethank
Mon 29th Oct '01, 12:32pm
Originally posted by Christine
Ethan - my hat is off to ya! I will be moving this into production today. :D

Here are some additional notes for the optional template section - changing the column header and the wording of the redirect screen.

in forumdisplay/forumdisplay_forumslist and
Forumhome/forumhome

Replace Moderator with Functions (or whatever tag you choose)

in redirection/redirect_markread

Replace with:
The forum(s) you have selected have been marked as read and the new post indicators will now be off.

Thanks. I'll add those and HTML-ize the instructions, as well as put an install script together. Anyone have the source for a good install script, like the one Kier uses?

Do tell me how it works in production and if you see any code tweaks that can be done. I'm working on a blogger hack right now, so my coding time is all difused :)

Ethan

Christine
Mon 29th Oct '01, 1:57pm
Yes, it should be interesting. I just checked and I have just under 400 users on line right now so I will wait for it to slow down a bit and load it up. I will let you know.

:)

ethank
Mon 29th Oct '01, 2:29pm
Originally posted by Christine
Yes, it should be interesting. I just checked and I have just under 400 users on line right now so I will wait for it to slow down a bit and load it up. I will let you know.

:)

Yeah, as on the index.php load, if it sees they don't have a markread set it adds it. You might want to close the board for 5 or so minutes to let people clear out, add the hack then open it.

Ethan

Christine
Mon 29th Oct '01, 8:57pm
Yes - I saw that. I opened a thread in the "how do I" forum on doing a forced logout of the database connection but apparently there is no script that will do that but there were a couple of workarounds offered.

I will play with it.


BTW - can you take a look at this question on the MFR hack?

http://vbulletin.com/forum/showthread.php?s=&threadid=31721

Trillian
Mon 29th Oct '01, 9:13pm
I just want to say I installed this hack and (except for a few screw-ups on my part) it worked great! :)

Now I'm not a huge fan of EZBoard, but we are in the middle of a transition from EZB, so I'm trying to consider the needs of my users.

For those who aren't familiar with EZB, after a user reads a message, it still acts like it is "unread" UNTIL the user declares the forum as "Mark Read".

Hence, my question: How can I tweak it so a user can view a thread, and it still appears as "unread" until they manually declare it as "Mark Read"?

I know not all of us hackers want that feature, but I think my users would like that familiarity with EZB.

Any input would be appreciated.

And ethank, thanks again... this hack is great!

ethank
Mon 29th Oct '01, 11:00pm
Thats a function in vbulletin, it uses cookies for the unread vs. read. The down arrow indicates its unread in the database.

I do want to fix it so it uses the time the user loaded the forum instead of when they click the link, that way if messages are posted when they're reading, they don't get marked. Of course you can fix that if you turn caching off.

Ethan

ethank
Mon 29th Oct '01, 11:02pm
Originally posted by Christine
Yes - I saw that. I opened a thread in the "how do I" forum on doing a forced logout of the database connection but apparently there is no script that will do that but there were a couple of workarounds offered.

I will play with it.


BTW - can you take a look at this question on the MFR hack?

http://vbulletin.com/forum/showthread.php?s=&threadid=31721

He's talking about the Mark Forum Read that uses two cookies that vbulletin 2.2 has I believe, not the database mark read hack.

Ethan

Christine
Tue 30th Oct '01, 11:33am
He's talking about the Mark Forum Read that uses two cookies that vbulletin 2.2 has I believe, not the database mark read hack

I am having the same problem in my test region where this hack is implemented. It still times out and marks forums as read based on the cookie as opposed to letting me manually set it.

Other than increasing the cookie timeout, is there something else that I can do to stop it from timing the lightbulb out?

ethank
Tue 30th Oct '01, 11:49am
It shouldn't even use the cookie if you're logged in and you put this hack on.

Ethan

Christine
Tue 30th Oct '01, 1:45pm
My bad - it is working properly. I need to pay attention to the fact that it is logging me out everytime I change between the production and test boards.

DOH!

I will update that other thread as well with a link to this hack.