PDA

View Full Version : Stumped on query using bitfield


Antivirus
04-01-2009, 08:21 PM
I want my query to return only users allowed to post new threads in a specific forum. Naturally, I want it to adhere not only to usergroup permission for the said forum, but also to override according to forumpermissions - because certain usergroups have custom forum permissions for this specific forum, therefore we can't go solely upon usergroupid or membergroupids.

Here's what I have so far:

$bit1 = ($vbulletin->bf_ugp_forumpermissions['canpostnew']);
$userarray = array('' => '-');
$sqlu = $vbulletin->db->query_read("
SELECT userid, username
FROM user AS user
LEFT JOIN usergroup AS usergroup ON (user.usergroupid = usergroup.usergroupid)
LEFT JOIN forumpermission AS forumpermission ON (user.usergroupid = forumpermission.usergroupid) OR (find_in_set(forumpermission.usergroupid, user.membergroupids))
" . iif($bit1, "WHERE (usergroup.forumpermissions & $bit1) OR (forumpermission.forumpermissions & $bit1)", "WHERE userid = " . $vbulletin->userinfo['userid']) . "
AND forumpermission.forumid = " . intval($foruminfo['forumid']) . "
GROUP BY user.userid
ORDER BY user.username
");
while ($user = $vbulletin->db->fetch_array($sqlu))
{
$userarray[$user['userid']] = $user['username'];
}


This is working nicely with regards to the standard usergroup permissions for the specific forum in question, however it's still not taking into account the custom forumpermission entries for this specific forum.

I am looking into how vbulletin figures ouf the userinfo->forumpermissions array and hopefully that can help me, but if anyone sees or already knows what is wrong with my query, i would certainly appreciate the help as opposed to looking for a solution on my own well into the night.

Thanhks :)