Quote:
Originally Posted by nerbert
I fixed the problem with cookie based thread marking and now the link shows only for threads younger than the marking cut off limit.
Here's a quick paste in update.
For the "Build Form and Link" Plugin:
Code:
if($vbulletin->options['enable_mark_unread'])
{
$template_hook['showthread_after_activeusers'] .= '
<form name="unmark">
<input type="hidden" name="do" value="unmark" />
<input type="hidden" name="threadid" value="' . $threadinfo['threadid'] . '" />
<input type="hidden" name="forumid" value="' . $foruminfo['forumid'] . '" />
<input type="hidden" name="userid" value="' . $vbulletin->userinfo['userid'] . '" />
<input type="hidden" name="s" value="' . $session['sessionhash'] . '" />
<input type="hidden" name="securitytoken" value="' . $vbulletin->userinfo['securitytoken'] . '" />
</form>
<script>
function vB_AJAX_Mark_Unread(form) {
this.form = form;
this.lastPost = ' . $threadinfo['lastpost'] . ';
this.cutOff = ' . TIMENOW - ($vbulletin->options['markinglimit'] * 86400) . ';
}
vB_AJAX_Mark_Unread.prototype.addLink = function() {
if(this.lastPost > this.cutOff) {
var unmark = document.createElement("li");
unmark.innerHTML = \'<a id="mark_unread" href="javascript:markUnread.unmark();">' . $vbphrase['mark_unread'] . '</a>\';
fetch_object("threadtools").getElementsByTagName("ul")[0].appendChild(unmark);
}
}
vB_AJAX_Mark_Unread.prototype.unmark = function() {
YAHOO.util.Connect.setForm(this.form);
YAHOO.util.Connect.asyncRequest("POST","showthread.php?do=unmark",{success:this.confirm,failure:this.confirm,timeout:vB_Default_Timeout,scope:this});
}
vB_AJAX_Mark_Unread.prototype.confirm = function(doc) {
fetch_object("mark_unread").parentNode.innerHTML = \'<a style="background:rgb(200,50,20);color:white;">' . $vbphrase['marked_unread'] .'</a>\';
}
markUnread = new vB_AJAX_Mark_Unread(document.forms.unmark);
window.onload = function() {
markUnread.addLink();
}
</script>
';
}
For the "Delete Query" plugin:
Code:
if($vbulletin->options['enable_mark_unread'])
{
if($_REQUEST['do'] == 'unmark')
{
$vbulletin->input->clean_array_gpc('r', array(
'threadid' => TYPE_STR,
'forumid' => TYPE_STR,
'userid' => TYPE_STR
));
$threadid = intval($vbulletin->GPC['threadid']);
$forumid = intval($vbulletin->GPC['forumid']);
$userid = intval($vbulletin->GPC['userid']);
if ($vbulletin->options['threadmarking'])
{
$vbulletin->db->query_write("
DELETE FROM " . TABLE_PREFIX . "threadread
WHERE threadid = $threadid
AND userid = $userid;
");
$vbulletin->db->query_write("
DELETE FROM " . TABLE_PREFIX . "forumread
WHERE forumid = $forumid
AND userid = $userid;
");
die('done');
}
else
{
set_bbarray_cookie('thread_lastview', $threadid, 0);
}
}
}
|
Not working correctly. It now fails to show the Mark Unread option in threads that are well within the timeframe (using database marking).
Fortunately, I didn't overwrite my saved copy of the previous version which was better, IMO.