Log in

View Full Version : Forum Display and Thread Viewing Permissions..


himerus
01-12-2006, 09:10 PM
I'm a little stuck here in implementing the appropriate viewing permissions for a custom forum...

in forumdisplay.php,


$hook_query_fields = $hook_query_joins = $hook_query_where = '';
($hook = vBulletinHook::fetch_hook('forumdisplay_query')) ? eval($hook) : false;

$threads = $db->query_read("
SELECT $votequery $previewfield
thread.threadid, thread.title AS threadtitle, thread.forumid, pollid, open, replycount, postusername, postuserid, thread.iconid AS threadiconid,
$lastpost_info, thread.dateline, IF(views<=replycount, replycount+1, views) AS views, notes, thread.visible, sticky, votetotal, thread.attach,
hiddencount
" . iif($vbulletin->options['threadsubscribed'] AND $vbulletin->userinfo['userid'], ", NOT ISNULL(subscribethread.subscribethreadid) AS issubscribed") . "
" . iif($deljoin, ", deletionlog.userid AS del_userid, deletionlog.username AS del_username, deletionlog.reason AS del_reason")
. iif($vbulletin->options['threadmarking'] AND $vbulletin->userinfo['userid'], ', threadread.readtime AS threadread') . "
$hook_query_fields
FROM " . TABLE_PREFIX . "thread AS thread
$deljoin
" . iif($vbulletin->options['threadsubscribed'] AND $vbulletin->userinfo['userid'], " LEFT JOIN " . TABLE_PREFIX . "subscribethread AS subscribethread ON(subscribethread.threadid = thread.threadid AND subscribethread.userid = " . $vbulletin->userinfo['userid'] . ")") . "
" . iif($vbulletin->options['threadmarking'] AND $vbulletin->userinfo['userid'], " LEFT JOIN " . TABLE_PREFIX . "threadread AS threadread ON (threadread.threadid = thread.threadid AND threadread.userid = " . $vbulletin->userinfo['userid'] . ")") . "
$previewjoin
$tachyjoin
$hook_query_joins
WHERE thread.threadid IN (0$ids) $hook_query_where
ORDER BY sticky DESC, $sqlsortfield $sqlsortorder
");
unset($limitothers, $delthreadlimit, $deljoin,$datecut, $votequery, $sqlsortfield, $sqlsortorder, $threadids);


I need to be able to do the following.... with my plugin code...

if ($thread['forumid'] == 31) {
$hook_query_fields .= "";
$hook_query_joins .= "";
$hook_query_where .= "";
}

I need to in this particular forum, be able to only list threads that a user has already posted in... This forum is mainly populated from external forms and automated processes. The forum admins, and certain usergroups will have full permissions, and the thread owners will have full permissions to posts, but the other users will only be able to see listed for this particular forum the threads they have already posted in....

I'm not sure how to quickly do this with the join and where statements, but I'm sure someone could start me in the right direction....

Thanks in advance!!!

Would this work???

I think it's kind of working proplery... I've added my custom admin and staff usergroups to this one... they can browse all posts for this forum, but users can only view ones they've posted in.... and the first post must be made through another source...


if ($foruminfo[forumid] == 31 && $vbulletin->userinfo['usergroupid'] != "5" && $vbulletin->userinfo['usergroupid'] != "6" && $vbulletin->userinfo['usergroupid'] != "7" && $vbulletin->userinfo['usergroupid'] != "11"){
$hook_query_fields .= ", posted.parentid, posted.postid AS posted_verification";
$hook_query_joins .= " LEFT JOIN " . TABLE_PREFIX . "post AS posted ON(posted.threadid = thread.threadid AND posted.userid = " . $vbulletin->userinfo['userid'] . ")";
/* ############*/
$hook_query_where .= " AND posted.postid != ''";
}

is this correct in saying that only to pull this thread for viewing if the user has posted in the thread?

himerus
01-13-2006, 10:03 PM
I'm still having problems on this, but I'm close to a solution if I just had the right help. :)


if ($foruminfo[forumid] == 31 && $vbulletin->userinfo['usergroupid'] != "5" && $vbulletin->userinfo['usergroupid'] != "6" && $vbulletin->userinfo['usergroupid'] != "7" && $vbulletin->userinfo['usergroupid'] != "11"){
$hook_query_fields .= ", posted.parentid AS parent_verify, posted.postid AS posted_verification";
$hook_query_joins .= " INNER JOIN " . TABLE_PREFIX . "post AS posted ON(posted.threadid = thread.threadid AND posted.userid = " . $vbulletin->userinfo['userid'] . ")";
/* ############*/
$hook_query_where .= " AND posted.postid != ''";
}


This is pulling the right information, but I have LEFT JOIN ed the post table, and now, the user is getting the thread listed 3 times if they have had 3 posts in the thread.... I just need to verify that they have at least 1 post....

Can someone help me with this? I know it's a simple fix with what I'm trying to accomplish....