PDA

View Full Version : MySQL query for making a FORUM Active/Open ?


jwocky
06-01-2006, 01:49 AM
Does anyone know what the SQL query would be to make a certain forumid into an "Active" forum and an "Open" forum.. and vice versa?

Would be much appreciated!!

Update:

Ok I *think* I found the location where this info is kept and changed

Its in the forum.options area..

Now it seems my defauly forums have options of "87751" while one that has the Forum Active/Open settings set to NO are listed as "87748"

So I made a Db query command to change the 87748 to an 87751 to open a restricted forum..

if ($subfid>0)
{
echo "ACTIVE!!";
$vbulletin->db->query_write("
UPDATE " . TABLE_PREFIX . "forum
SET options = " . $activeperm ."
WHERE forumid = $subfid
");
}


Now the change goes through on the database.. and if I open the subforum options in AdminCP is lists the change as having taken effect (just from looking at the radio button things)..

But the problem is in the forum display to the user, the change doesnt take effect.. ie. the users still cant see the forum. The change doesnt go through until I resubmit the forum options form in AdminCP then it works..

Any ideas on why this is acting like that ?

Thanks!!!

Ps. Ive been doing more reading thru old threads and Im wondering if my problem has to do with updating the 'datastore' anyone know if i'm barking up the right or wrong tree here ?

hambil
06-02-2006, 05:28 PM
Okay, a couple things.

First, the options field is a bit field. So you want to find out the bit value of the option you want to change. In your case the difference is 3 (87751 - 87748), which means more than one option is different between the two forums, because valid bit values are multiples of 2. e.g. 1, 2, 4, 8, 16, 32, etc...

The only way to get three is if the option represented by 1 and the option represented by 2 are both different between the two forums. So we can assume that one of those options is "Open" and the other "Active".

Fortunately, since you want to toggle both open and active you can just go ahead and use 3 without knowing which is which. This will allow you to change the options regardless of what other options are set. You do so with simple math: options + 3, or options - 3. To check if the options are set, use options & 3.

So your query would like this to turn on the forum:

if ($subfid>0)
{
echo "ACTIVE!!";
$vbulletin->db->query_write("
UPDATE " . TABLE_PREFIX . "forum
SET options = options + 3
WHERE forumid = $subfid
");
}


And this to turn off the forum:

if ($subfid>0)
{
echo "NOT ACTIVE!!";
$vbulletin->db->query_write("
UPDATE " . TABLE_PREFIX . "forum
SET options = options - 3
WHERE forumid = $subfid
");
}


Second, once you've done that you need to rebuild $vbulletin->usergroupcache and $vbulletin->forumcache.

Fortunately, there is a handy function for this already in includes/adminfunctions.php. So just call it. The php code put all together might look like this:


require_once('./global.php');
require_once(DIR . '/includes/adminfunctions.php');

if ($subfid>0)
{
echo "ACTIVE!!";
$vbulletin->db->query_write("
UPDATE " . TABLE_PREFIX . "forum
SET options = options + 3
WHERE forumid = $subfid
");
}

build_forum_permissions();


Hope this helps :)

jwocky
06-02-2006, 07:52 PM
.... You

are a god to me :)

THank you for that perfect response. It works flawlessly now. !!!! I'm so happy my little script works now.

Thanks again my friend

:banana:

hambil
06-02-2006, 08:20 PM
LOL

Glad I could help :)

bigfoot
03-03-2007, 02:40 PM
How do you rebuild $vbulletin->forumcache automatically ???

gamma912
03-05-2007, 03:56 PM
Yes How do you?