Log in

View Full Version : Opt out forum IDs


utw-Mephisto
07-05-2006, 09:55 PM
We use this product to show a link for unread posts ... we would like to opt out certain forum IDs .. one solution from the author of this is to disable the search for those forums .. but this is hardly a solution for our forum ...

Does someone got an idea how to opt out forumids when looking into the code ?


<?xml version="1.0" encoding="ISO-8859-1" ?>
- <product productid="paulm_20050918" active="0">
<title>Display Unread Posts</title>
<description>Display the number of posts you have marked as unread.</description>
<version>1.02</version>
- <codes>
<code version="0.00" />
</codes>
<templates />
- <plugins>
- <plugin active="1">
<title>Display All Unread Posts</title>
<hookname>global_start</hookname>
- <phpcode>
- <![CDATA[ $unread = "";
if ($vbulletin->userinfo['userid'] AND $vbulletin->options['threadmarking'])
{
$unread = "No unread posts";

$xforum_ids = array_keys($vbulletin->forumcache);

foreach ($xforum_ids AS $key => $xforum_id)
{
$xfperms = & $vbulletin->userinfo['forumpermissions']["$xforum_id"];
$xforum = & $vbulletin->forumcache["$xforum_id"];
if ( !($xfperms & $vbulletin->bf_ugp_forumpermissions['canview']) OR !($xfperms & $vbulletin->bf_ugp_forumpermissions['cansearch']))
{
unset($xforum_ids["$key"]);
}
}

if (empty($xforum_ids))
{
$xforum_list = "0";
}
else
{
$xforum_list = implode(', ', $xforum_ids);
}

if ($vbulletin->options['unreadlv'])
{
$cutoff = $vbulletin->userinfo['lastvisit'];
}
else
{
$cutoff = TIMENOW - ($vbulletin->options['markinglimit'] * 86400);
}

$postcount = $vbulletin->db->query_first("
SELECT COUNT(post.postid) as unread
FROM " . TABLE_PREFIX . "post as post
INNER JOIN " . TABLE_PREFIX . "thread as thread ON (thread.threadid = post.threadid)
LEFT JOIN " . TABLE_PREFIX . "threadread AS threadread ON (threadread.threadid = thread.threadid AND threadread.userid = " . $vbulletin->userinfo['userid'] . ")
INNER JOIN " . TABLE_PREFIX . "forum AS forum ON (forum.forumid = thread.forumid)
LEFT JOIN " . TABLE_PREFIX . "forumread AS forumread ON (forumread.forumid = forum.forumid AND forumread.userid = " . $vbulletin->userinfo['userid'] . ")
WHERE thread.forumid IN($xforum_list)
AND thread.sticky IN (0,1) AND thread.visible IN (0,1,2)
AND thread.lastpost > IF(threadread.readtime IS NULL, $cutoff, threadread.readtime)
AND thread.lastpost > IF(forumread.readtime IS NULL, $cutoff, forumread.readtime)
AND thread.lastpost > $cutoff
AND post.dateline > IF(threadread.readtime IS NULL, $cutoff, threadread.readtime)
AND post.dateline > IF(forumread.readtime IS NULL, $cutoff, forumread.readtime)
AND post.dateline > $cutoff
");

if ($postcount['unread'])
{
if ($postcount['unread'] == 1)
{
$unread = "1 Unread Post";
}
else
{
$unread = $postcount['unread']." Unread Posts";
}
}

if ($vbulletin->options['unreadlv'])
{
$unread = "<a href='search.php?do=getnew'><b>" . $unread . "</b></a> since your last visit.<br />";
}
else
{
$unread = "You have <a href='search.php?do=getnew'><b>" . $unread . "</b></a><br />";
}

$search_text = '</strong><br />';
$vbulletin->templatecache['navbar'] = str_replace($search_text,$search_text.$unread,$vbu lletin->templatecache['navbar']);
}
]]>
</phpcode>
</plugin>
</plugins>
- <phrases>
- <phrasetype name="vBulletin Settings" fieldname="vbsettings">
- <phrase name="setting_unreadlv_desc">
- <![CDATA[ Set to 'yes' to use last visit date, 'no' to count all posts marked as unread.
]]>
</phrase>
- <phrase name="setting_unreadlv_title">
- <![CDATA[ Display Unread Posts Option
]]>
</phrase>
</phrasetype>
</phrases>
- <options>
- <settinggroup name="general" displayorder="30">
- <setting varname="unreadlv" displayorder="370">
<datatype>boolean</datatype>
<optioncode>yesno</optioncode>
<defaultvalue>1</defaultvalue>
</setting>
</settinggroup>
</options>
</product>

Antivirus
07-21-2007, 01:51 PM
Untested, but you'll most likely have to modify the following part of the code:


$xforum_ids = array_keys($vbulletin->forumcache);
foreach ($xforum_ids AS $key => $xforum_id)
{
$xfperms = & $vbulletin->userinfo['forumpermissions']["$xforum_id"];
if (!($xfperms & $vbulletin->bf_ugp_forumpermissions['canview']))
{
unset($xforum_ids["$key"]);
}
}

if (empty($xforum_ids))
{
$xforum_list = "0";
}
else
{
$xforum_list = implode(', ', $xforum_ids);
}


Since that's the part which defines the $xforum_list var that controls the query which counts the unread posts.

Kirk Y
07-21-2007, 04:01 PM
You realize this thread is more than a year old?