text:
<?php

/* $Id: forum.inc.php,v 1.1 2008/05/12 15:50:20 farell Exp $ */

// We shouldn't be accessing this file directly.

if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
    header("Request-URI: ../index.php");
    header("Content-Location: ../index.php");
    header("Location: ../index.php");
    exit;
}

include_once(BH_INCLUDE_PATH. "attachments.inc.php");
include_once(BH_INCLUDE_PATH. "constants.inc.php");
include_once(BH_INCLUDE_PATH. "db.inc.php");
include_once(BH_INCLUDE_PATH. "fixhtml.inc.php");
include_once(BH_INCLUDE_PATH. "folder.inc.php");
include_once(BH_INCLUDE_PATH. "form.inc.php");
include_once(BH_INCLUDE_PATH. "format.inc.php");
include_once(BH_INCLUDE_PATH. "header.inc.php");
include_once(BH_INCLUDE_PATH. "html.inc.php");
include_once(BH_INCLUDE_PATH. "install.inc.php");
include_once(BH_INCLUDE_PATH. "lang.inc.php");
include_once(BH_INCLUDE_PATH. "perm.inc.php");
include_once(BH_INCLUDE_PATH. "pm.inc.php");
include_once(BH_INCLUDE_PATH. "session.inc.php");
include_once(BH_INCLUDE_PATH. "stats.inc.php");
include_once(BH_INCLUDE_PATH. "text_captcha.inc.php");
include_once(BH_INCLUDE_PATH. "threads.inc.php");
include_once(BH_INCLUDE_PATH. "user.inc.php");
include_once(BH_INCLUDE_PATH. "word_filter.inc.php");

function get_forum_data()
{
    static $forum_data = false;

    if (!$db_get_forum_data = db_connect()) return false;

    if (($uid = bh_session_get_value('UID')) === false) return false;

    if (isset($_GET['webtag']) && strlen(trim(_stripslashes($_GET['webtag']))) > 0) {
        $webtag = trim(_stripslashes($_GET['webtag']));
    }elseif (isset($_POST['webtag']) && strlen(trim(_stripslashes($_POST['webtag']))) > 0) {
        $webtag = trim(_stripslashes($_POST['webtag']));
    }elseif (isset($_SERVER['argv'][1]) && strlen(trim(_stripslashes($_SERVER['argv'][1]))) > 0) {
        $webtag = trim(_stripslashes($_SERVER['argv'][1]));
    }

    if (!is_array($forum_data) || !isset($forum_data['WEBTAG']) || !isset($forum_data['PREFIX'])) {

        if (isset($webtag) && preg_match("/^[A-Z0-9_]+$/", $webtag) > 0) {

            // Check #1: See if the webtag specified in GET/POST
            // actually exists.

            $webtag = db_escape_string($webtag);

            $sql = "SELECT FORUMS.FID, FORUMS.WEBTAG, FORUMS.ACCESS_LEVEL, ";
            $sql.= "CONCAT(FORUMS.DATABASE_NAME, '.', FORUMS.WEBTAG, '_') AS PREFIX ";
            $sql.= "FROM FORUMS WHERE WEBTAG = '$webtag'";

            if ($result = db_query($sql, $db_get_forum_data)) {

                if (db_num_rows($result) > 0) {

                    $forum_data = db_fetch_array($result);

                    if (!isset($forum_data['ACCESS_LEVEL'])) $forum_data['ACCESS_LEVEL'] = 0;
                    if (!isset($forum_data['ALLOWED'])) $forum_data['ALLOWED'] = 0;

                    return $forum_data;
                }
            }

            return array('WEBTAG_SEARCH' => $webtag);

        }else {

            // Check #2: Try and select a default webtag from
            // the databse

            $sql = "SELECT FORUMS.FID, FORUMS.WEBTAG, FORUMS.ACCESS_LEVEL, ";
            $sql.= "CONCAT(FORUMS.DATABASE_NAME, '.', FORUMS.WEBTAG, '_') AS PREFIX ";
            $sql.= "FROM FORUMS WHERE DEFAULT_FORUM = 1";

            if ($result = db_query($sql, $db_get_forum_data)) {

                if (db_num_rows($result) > 0) {

                    $forum_data = db_fetch_array($result);

                    if (!isset($forum_data['ACCESS_LEVEL'])) $forum_data['ACCESS_LEVEL'] = 0;
                    if (!isset($forum_data['ALLOWED'])) $forum_data['ALLOWED'] = 0;
                }
            }
        }
    }

    return $forum_data;
}

function get_webtag(&$webtag_search)
{
    $forum_data = get_forum_data();

    if (is_array($forum_data) && isset($forum_data['WEBTAG'])) {
        return $forum_data['WEBTAG'];
    }

    if (is_array($forum_data) && isset($forum_data['WEBTAG_SEARCH'])) {
        $webtag_search = $forum_data['WEBTAG_SEARCH'];
    }

    return false;
}

function get_table_prefix()
{
    $forum_data = get_forum_data();

    if (is_array($forum_data) && isset($forum_data['WEBTAG'])) {
        return $forum_data;
    }

    return false;
}

function forum_check_access_level()
{
    static $forum_data = false;

    if (!$db_forum_check_access_level = db_connect()) return false;

    if (($uid = bh_session_get_value('UID')) === false) return false;

    if (!$table_data = get_table_prefix()) return true;

    $forum_fid = $table_data['FID'];

    if (!is_array($forum_data) || !isset($forum_data['ACCESS_LEVEL']) || !isset($forum_data['ALLOWED'])) {

        $sql = "SELECT FORUMS.FID, FORUMS.ACCESS_LEVEL, USER_FORUM.ALLOWED FROM FORUMS ";
        $sql.= "LEFT JOIN USER_FORUM ON (USER_FORUM.FID = FORUMS.FID ";
        $sql.= "AND USER_FORUM.UID = '$uid') WHERE FORUMS.FID = '$forum_fid'";

        if (!$result = db_query($sql, $db_forum_check_access_level)) return false;

        if (db_num_rows($result) > 0) {

            $forum_data = db_fetch_array($result);
        }
    }

    if (isset($forum_data['ACCESS_LEVEL'])) {

        if ($forum_data['ACCESS_LEVEL'] < FORUM_UNRESTRICTED) {

            return forum_closed_message();

        }elseif ($forum_data['ACCESS_LEVEL'] == FORUM_RESTRICTED && $forum_data['ALLOWED'] <> FORUM_USER_ALLOWED) {

            return forum_restricted_message();

        }elseif ($forum_data['ACCESS_LEVEL'] == FORUM_PASSWD_PROTECTED) {

            return forum_check_password($forum_data['FID']);
        }
    }

    return true;
}

function forum_closed_message()
{
    $lang = load_language_file();

    html_draw_top();

    $forum_name = forum_get_setting('forum_name', false, 'A Beehive Forum');

    echo "
{$lang['closed']}
\n";

    if ($closed_message = forum_get_setting('closed_message', false)) {

        html_display_error_msg(fix_html($closed_message), '600', 'center');

    }else {

        html_display_error_msg(sprintf($lang['forumiscurrentlyclosed'], _htmlentities($forum_name)), '600', 'center');
    }

    if (bh_session_check_perm(USER_PERM_ADMIN_TOOLS, 0) || bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

        html_display_warning_msg($lang['adminforumclosedtip'], '600', 'center');
    }

    html_draw_bottom();
    exit;
}

function forum_restricted_message()
{
    $lang = load_language_file();

    html_draw_top();

    $forum_name = forum_get_setting('forum_name', false, 'A Beehive Forum');

    echo "
{$lang['restricted']}
\n";

    if ($restricted_message = forum_get_setting('restricted_message', false)) {

        html_display_error_msg(fix_html($restricted_message), '600', 'center');

    }else {

        html_display_error_msg(sprintf($lang['youdonothaveaccesstoforum'], _htmlentities($forum_name)), '600', 'center');
        html_display_warning_msg($lang['toapplyforaccessplease'], '600', 'center');
    }

    if (bh_session_check_perm(USER_PERM_ADMIN_TOOLS, 0) || bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

        html_display_warning_msg($lang['adminforumclosedtip'], '600', 'center');
    }

    html_draw_bottom();
    exit;
}

function forum_get_password($forum_fid)
{
    if (!$db_forum_get_password = db_connect()) return false;

    if (!is_numeric($forum_fid)) return false;

    $sql = "SELECT FORUM_PASSWD FROM FORUMS WHERE FID = '$forum_fid'";

    if (!$result = db_query($sql, $db_forum_get_password)) return false;

    if (db_num_rows($result) > 0) {

        list($forum_passwd) = db_fetch_array($result, DB_RESULT_NUM);
        return is_md5($forum_passwd) ? $forum_passwd : false;
    }

    return false;
}

function forum_get_saved_password(&$password, &$passhash, &$sesshash)
{
    $webtag = get_webtag($webtag_search);

    if (isset($_COOKIE["bh_{$webtag}_password"]) && strlen(_stripslashes($_COOKIE["bh_{$webtag}_password"])) > 0) {
        $password = _stripslashes($_COOKIE["bh_{$webtag}_password"]);
    }else {
        $password = "";
    }

    if (isset($_COOKIE["bh_{$webtag}_passhash"]) && is_md5($_COOKIE["bh_{$webtag}_passhash"])) {
        $passhash = trim(_stripslashes($_COOKIE["bh_{$webtag}_passhash"]));
    }else {
        $passhash = "";
    }

    if (isset($_COOKIE["bh_{$webtag}_sesshash"]) && is_md5($_COOKIE["bh_{$webtag}_sesshash"])) {
        $sesshash = trim(_stripslashes($_COOKIE["bh_{$webtag}_sesshash"]));
    }else {
        $sesshash = "";
    }

    return true;
}

function forum_check_password($forum_fid)
{
    $frame_top_target = html_get_top_frame_name();

    if (!$db_forum_check_password = db_connect()) return false;

    $webtag = get_webtag($webtag_search);

    if (!is_numeric($forum_fid)) return false;

    if ($forum_passhash = forum_get_password($forum_fid)) {

        forum_get_saved_password($password, $passhash, $sesshash);

        if ($sesshash == $forum_passhash) return true;

        // If we got this far then the password verification failed or
        // the user hasn't seen the password dialog before.

        $lang = load_language_file();

        html_draw_top();

        echo "
{$lang['passwdprotectedforum']}
\n";

        if (isset($_COOKIE["bh_{$webtag}_sesshash"]) && strlen(trim(_stripslashes($_COOKIE["bh_{$webtag}_sesshash"]))) > 0) {

            bh_setcookie("bh_{$webtag}_sesshash", "", time() - YEAR_IN_SECONDS);
            html_display_error_msg($lang['usernameorpasswdnotvalid'], '550', 'center');
        }

        echo "
\n";
        echo "
\n";
        echo "  <form method=\"post\" action=\"forum_password.php\" target=\"", html_get_top_frame_name(), "\">\n";
        echo "    ", form_input_hidden('webtag', _htmlentities($webtag)), "\n";
        echo "    ", form_input_hidden('final_uri', _htmlentities(get_request_uri())), "\n";
        echo "
\n";

        if ($password_protected_message = forum_get_setting('password_protected_message', false)) {

            echo "
\n";
            echo "        ", fix_html($password_protected_message), "	\n";
            echo "
\n";

        }else {

            echo "
\n";
            echo "        {$lang['passwdprotectedwarning']}	\n";
            echo "
\n";
        }

        echo "
\n";
        echo "         	\n";
        echo "
\n";
        echo "
\n";
        echo "        \n";
        echo "
\n";
        echo "
\n";
        echo "              \n";
        echo "
\n";
        echo "
\n";
        echo "                    {$lang['enterpasswd']}	\n";
        echo "
\n";
        echo "
\n";
        echo "
\n";
        echo "
\n";
        echo "                    {$lang['passwd']}:	\n";
        echo "                    ", form_input_password('forum_password', _htmlentities($password), 40, false, "autocomplete=\"off\""), form_input_hidden("forum_passhash", _htmlentities($passhash)), "	\n";
        echo "
\n";
        echo "
\n";
        echo "                     	\n";
        echo "                    ", form_checkbox('remember_password', 'Y', $lang['rememberpassword'], (strlen($password) > 0 && strlen($passhash) > 0)), "	\n";
        echo "
\n";
        echo "
\n";
        echo "                     	\n";
        echo "
\n";
        echo "
\n";
        echo "              	\n";
        echo "
\n";
        echo "
\n";
        echo "        	\n";
        echo "
\n";
        echo "
\n";
        echo "         	\n";
        echo "
\n";
        echo "
\n";
        echo "        ", form_submit("submit", $lang['logon']), " ", form_submit("cancel", $lang['cancel']), "	\n";
        echo "
\n";

        if (bh_session_check_perm(USER_PERM_ADMIN_TOOLS, 0) || bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

            echo "
\n";
            echo "         	\n";
            echo "
\n";
            echo "
\n";
            echo "        {$lang['adminforumclosedtip']}	\n";
            echo "
\n";
        }

        echo "
\n";
        echo "  </form>\n";
        echo "
\n";

        html_draw_bottom();
        exit;
    }

    return true;
}

function forum_get_settings()
{
    if (!$db_forum_get_settings = db_connect()) return false;

    static $forum_settings_array = false;

    if (!$table_data = get_table_prefix()) return false;

    $forum_fid = $table_data['FID'];

    if (!is_array($forum_settings_array)) {

        $forum_settings_array = array('fid' => $forum_fid);

        // Get the named settings from FORUM_SETTINGS table.

        $sql = "SELECT SNAME, SVALUE FROM FORUM_SETTINGS WHERE FID = '$forum_fid'";

        if (!$result = db_query($sql, $db_forum_get_settings)) return false;

        if (db_num_rows($result) > 0) {

            if (!is_array($forum_settings_array)) $forum_settings_array = array();

            while ($forum_data = db_fetch_array($result)) {

                $forum_settings_array[$forum_data['SNAME']] = $forum_data['SVALUE'];
            }
        }

        // Get the forum timezone, GMT offset and DST offset.

        $sql = "SELECT FORUM_SETTINGS.SVALUE, TIMEZONES.GMT_OFFSET, ";
        $sql.= "TIMEZONES.DST_OFFSET FROM FORUM_SETTINGS FORUM_SETTINGS ";
        $sql.= "LEFT JOIN TIMEZONES ON (TIMEZONES.TZID = FORUM_SETTINGS.SVALUE) ";
        $sql.= "WHERE FORUM_SETTINGS.SNAME = 'forum_timezone' ";
        $sql.= "AND FORUM_SETTINGS.FID = '$forum_fid'";

        if (!$result = db_query($sql, $db_forum_get_settings)) return false;

        if (db_num_rows($result) > 0) {

            if (!is_array($forum_settings_array)) $forum_settings_array = array();

            while ($forum_timezone_data = db_fetch_array($result)) {

                $forum_settings_array['forum_timezone'] = $forum_timezone_data['SVALUE'];
                $forum_settings_array['forum_gmt_offset'] = $forum_timezone_data['GMT_OFFSET'];
                $forum_settings_array['forum_dst_offset'] = $forum_timezone_data['DST_OFFSET'];
            }
        }

        // Get the WEBTAG and ACCESS_LEVEL

        $sql = "SELECT WEBTAG, ACCESS_LEVEL FROM FORUMS WHERE FID = '$forum_fid'";

        if (!$result = db_query($sql, $db_forum_get_settings)) return false;

        list($webtag, $access_level) = db_fetch_array($result, DB_RESULT_NUM);

        $forum_settings_array['webtag'] = $webtag;
        $forum_settings_array['access_level'] = $access_level;
    }

    return $forum_settings_array;
}

function forum_get_global_settings()
{
    if (!$db_forum_get_global_settings = db_connect()) return false;

    static $forum_global_settings_array = false;

    if (!is_array($forum_global_settings_array)) {

        $sql = "SELECT SNAME, SVALUE FROM FORUM_SETTINGS WHERE FID = '0'";

        if (!$result = db_query($sql, $db_forum_get_global_settings)) return false;

        if (db_num_rows($result) > 0) {

            if (!is_array($forum_global_settings_array)) $forum_global_settings_array = array();

            while ($forum_data = db_fetch_array($result)) {

                $forum_global_settings_array[$forum_data['SNAME']] = $forum_data['SVALUE'];
            }
        }

        $sql = "SELECT FORUM_SETTINGS.SVALUE, TIMEZONES.GMT_OFFSET, ";
        $sql.= "TIMEZONES.DST_OFFSET FROM FORUM_SETTINGS FORUM_SETTINGS ";
        $sql.= "LEFT JOIN TIMEZONES ON (TIMEZONES.TZID = FORUM_SETTINGS.SVALUE) ";
        $sql.= "WHERE FORUM_SETTINGS.SNAME = 'forum_timezone' ";
        $sql.= "AND FORUM_SETTINGS.FID = '0'";

        if (!$result = db_query($sql, $db_forum_get_global_settings)) return false;

        if (db_num_rows($result) > 0) {

            if (!is_array($forum_global_settings_array)) $forum_global_settings_array = array();

            while ($forum_timezone_data = db_fetch_array($result)) {

                $forum_global_settings_array['forum_timezone'] = $forum_timezone_data['SVALUE'];
                $forum_global_settings_array['forum_gmt_offset'] = $forum_timezone_data['GMT_OFFSET'];
                $forum_global_settings_array['forum_dst_offset'] = $forum_timezone_data['DST_OFFSET'];
            }
        }
    }

    return $forum_global_settings_array;
}

function forum_get_settings_by_fid($fid, $include_global_settings = true)
{
    if (!$db_forum_get_settings_by_fid = db_connect()) return false;

    if (!is_numeric($fid)) return false;

    $forum_settings_array = array('fid' => $fid);

    $sql = "SELECT WEBTAG, ACCESS_LEVEL FROM FORUMS WHERE FID = '$fid'";

    if (!$result = db_query($sql, $db_forum_get_settings_by_fid)) return false;

    list($webtag, $access_level) = db_fetch_array($result, DB_RESULT_NUM);

    $forum_settings_array['webtag'] = $webtag;
    $forum_settings_array['access_level'] = $access_level;

    $sql = "SELECT SNAME, SVALUE FROM FORUM_SETTINGS WHERE FID = '$fid'";

    if (!$result = db_query($sql, $db_forum_get_settings_by_fid)) return false;

    while ($forum_data = db_fetch_array($result)) {

        $forum_settings_array[$forum_data['SNAME']] = $forum_data['SVALUE'];
    }

    $sql = "SELECT FORUM_SETTINGS.SVALUE AS TIMEZONE, TIMEZONES.GMT_OFFSET, ";
    $sql.= "TIMEZONES.DST_OFFSET FROM FORUM_SETTINGS FORUM_SETTINGS ";
    $sql.= "LEFT JOIN TIMEZONES ON (TIMEZONES.TZID = FORUM_SETTINGS.SVALUE) ";
    $sql.= "WHERE FORUM_SETTINGS.SNAME = 'forum_timezone' ";
    $sql.= "AND FID = '$fid'";

    if (!$result = db_query($sql, $db_forum_get_settings_by_fid)) return false;

    list($timezone, $gmt_offset, $dst_offset) = db_fetch_array($result, DB_RESULT_NUM);

    $forum_settings_array['forum_timezone'] = $timezone;
    $forum_settings_array['forum_gmt_offset'] = $gmt_offset;
    $forum_settings_array['forum_dst_offset'] = $dst_offset;

    if ($include_global_settings === true) {

        $forum_global_settings = forum_get_global_settings();
        return array_merge($forum_global_settings, $forum_settings_array);
    }

    return $forum_settings_array;
}

function forum_save_settings($forum_settings_array)
{
    if (!is_array($forum_settings_array)) return false;

    if (!$db_forum_save_settings = db_connect()) return false;

    if (!$table_data = get_table_prefix()) return false;

    $forum_fid = $table_data['FID'];

    foreach ($forum_settings_array as $sname => $svalue) {

        if (forum_check_setting_name($sname)) {

            $sname  = db_escape_string($sname);
            $svalue = db_escape_string($svalue);

            $sql = "SELECT SVALUE FROM FORUM_SETTINGS WHERE FID = '$forum_fid' ";
            $sql.= "AND SNAME = '$sname'";

            if (!$result = db_query($sql, $db_forum_save_settings)) return false;

            if (db_num_rows($result) > 0) {

                $sql = "UPDATE LOW_PRIORITY FORUM_SETTINGS SET SVALUE = '$svalue' WHERE FID = '$forum_fid' ";
                $sql.= "AND SNAME = '$sname'";

                if (!$result = db_query($sql, $db_forum_save_settings)) return false;

            }else {

                $sql = "INSERT INTO FORUM_SETTINGS (FID, SNAME, SVALUE) ";
                $sql.= "VALUES ($forum_fid, '$sname', '$svalue')";

                if (!$result = db_query($sql, $db_forum_save_settings)) return false;
            }
        }
    }

    return true;
}

function forum_save_default_settings($forum_settings_array)
{
    if (!is_array($forum_settings_array)) return false;

    if (!$db_forum_save_default_settings = db_connect()) return false;

    foreach ($forum_settings_array as $sname => $svalue) {

        if (forum_check_global_setting_name($sname)) {

            $sname = db_escape_string($sname);
            $svalue = db_escape_string($svalue);

            $sql = "SELECT SVALUE FROM FORUM_SETTINGS WHERE FID = '0' ";
            $sql.= "AND SNAME = '$sname'";

            if (!$result = db_query($sql, $db_forum_save_default_settings)) return false;

            if (db_num_rows($result) > 0) {

                $sql = "UPDATE LOW_PRIORITY FORUM_SETTINGS SET SVALUE = '$svalue' WHERE FID = '0' ";
                $sql.= "AND SNAME = '$sname'";

                if (!$result = db_query($sql, $db_forum_save_default_settings)) return false;

            }else {

                $sql = "INSERT INTO FORUM_SETTINGS (FID, SNAME, SVALUE) ";
                $sql.= "VALUES ('0', '$sname', '$svalue')";

                if (!$result = db_query($sql, $db_forum_save_default_settings)) return false;
            }
        }
    }

    return true;
}

function forum_check_setting_name($setting_name)
{
    $valid_forum_settings = array('allow_polls', 'allow_post_editing', 'allow_search_spidering',
                                  'closed_message', 'default_emoticons', 'default_language',
                                  'default_style', 'enable_wiki_integration', 'enable_wiki_quick_links',
                                  'force_word_filter', 'forum_desc', 'forum_dl_saving', 'forum_email',
                                  'forum_keywords', 'forum_name', 'forum_timezone', 'guest_account_enabled',
                                  'guest_show_recent', 'maximum_post_length', 'minimum_post_frequency',
                                  'password_protected_message', 'poll_allow_guests', 'post_edit_grace_period',
                                  'post_edit_time', 'require_post_approval', 'restricted_message', 'show_links',
                                  'show_stats', 'wiki_integration_uri');

    return in_array($setting_name, $valid_forum_settings);
}

function forum_check_global_setting_name($setting_name)
{
    $valid_global_forum_settings = array('active_sess_cutoff', 'allow_new_registrations', 'allow_search_spidering',
                                         'allow_username_changes', 'attachments_allow_embed', 'attachments_enabled',
                                         'attachments_max_user_space', 'attachment_allow_guests', 'attachment_dir',
                                         'attachment_use_old_method', 'forum_desc', 'forum_email',
                                         'forum_keywords', 'forum_name', 'forum_noreply_email',
                                         'forum_rules_enabled', 'forum_rules_message', 'guest_account_enabled',
                                         'guest_show_recent', 'messages_unread_cutoff', 'messages_unread_cutoff_custom',
                                         'new_user_email_notify', 'new_user_mark_as_of_int', 'new_user_pm_notify_email',
                                         'pm_allow_attachments', 'pm_auto_prune', 'pm_max_user_messages',
                                         'require_email_confirmation', 'require_unique_email', 'require_user_approval',
                                         'search_min_frequency', 'session_cutoff', 'showpopuponnewpm', 'show_pms',
                                         'text_captcha_dir', 'text_captcha_enabled', 'text_captcha_key');

    return in_array($setting_name, $valid_global_forum_settings);
}

function forum_get_name($fid)
{
    if (!$db_forum_get_name = db_connect()) return false;

    if (!is_numeric($fid)) return "A Beehive Forum";

    $sql = "SELECT SVALUE AS FORUM_NAME FROM FORUM_SETTINGS ";
    $sql.= "WHERE SNAME = 'forum_name' AND FID = '$fid'";

    if (!$result = db_query($sql, $db_forum_get_name)) return false;

    if (db_num_rows($result) > 0) {

        list($forum_name) = db_fetch_array($result, DB_RESULT_NUM);
        return $forum_name;
    }

    return "A Beehive Forum";
}

function forum_get_webtag($fid)
{
    if (!$db_forum_get_webtag = db_connect()) return false;

    if (!is_numeric($fid)) return false;

    $sql = "SELECT WEBTAG FROM FORUMS WHERE FID = '$fid'";

    if (!$result = db_query($sql, $db_forum_get_webtag)) return false;

    if (db_num_rows($result) > 0) {

        list($forum_webtag) = db_fetch_array($result, DB_RESULT_NUM);
        return $forum_webtag;
    }

    return false;
}

function forum_get_table_prefix($fid)
{
    if (!$db_forum_get_webtag = db_connect()) return false;

    if (!is_numeric($fid)) return false;

    $sql = "SELECT CONCAT(FORUMS.DATABASE_NAME, '.', FORUMS.WEBTAG, '_') AS PREFIX, ";
    $sql.= "FID, WEBTAG FROM FORUMS WHERE FID = '$fid'";

    if (!$result = db_query($sql, $db_forum_get_webtag)) return false;

    if (db_num_rows($result) > 0) {

        $forum_data = db_fetch_array($result);
        return $forum_data;
    }

    return false;
}

function forum_get_setting($setting_name, $value = false, $default = false)
{
    $forum_settings = (isset($GLOBALS['forum_settings'])) ? $GLOBALS['forum_settings'] : false;
    $forum_global_settings = (isset($GLOBALS['forum_global_settings'])) ? $GLOBALS['forum_global_settings'] : false;

    if (is_array($forum_settings) && isset($forum_settings[$setting_name])) {

        if ($value !== false) {

            if (strtoupper($forum_settings[$setting_name]) == strtoupper($value)) {

                return true;
            }

        }else {

            return $forum_settings[$setting_name];
        }
    }

    if (is_array($forum_global_settings) && isset($forum_global_settings[$setting_name])) {

        if ($value !== false) {

            if (strtoupper($forum_global_settings[$setting_name]) == strtoupper($value)) {

                return true;
            }

        }else {

            return $forum_global_settings[$setting_name];
        }
    }

    return $default;
}

/**
* Get Unread Cutoff
*
* Retrieves and validates the current forum's unread cut-off value.
*
* @return mixed - False if unread messages are disabled or integer number of seconds the cut-off is set to.
* @param void
*/

function forum_get_unread_cutoff()
{
    // Array of valid Unread cutoff periods.

    $unread_cutoff_periods = array(THIRTY_DAYS_IN_SECONDS, SIXTY_DAYS_IN_SECONDS,
                                   NINETY_DAYS_IN_SECONDS, HUNDRED_EIGHTY_DAYS_IN_SECONDS,
                                   YEAR_IN_SECONDS);

    // Fetch the unread cutoff value

    $messages_unread_cutoff = forum_get_setting('messages_unread_cutoff');

    // If unread message support is disabled we return false.

    if ($messages_unread_cutoff == UNREAD_MESSAGES_DISABLED) return false;

    // If unread message support isn't disabled we should check that
    // It is a valid value and return it or return the default of one year.

    return in_array($messages_unread_cutoff, $unread_cutoff_periods) ? $messages_unread_cutoff : YEAR_IN_SECONDS;
}

/**
* Process Unread Cutoff
*
* Processes and validates a forum unread cut-off value saved in a settings array.
* Works the same as forum_get_unread_cutoff() but is intended to be passed an
* array of forum settings from forum_get_settings() or other.
*
* @return mixed - False if unread messages are disabled or integer number of seconds the cut-off is set to.
* @param void
*/

function forum_process_unread_cutoff($forum_settings)
{
    // Check the $forum_settings array.

    if (!is_array($forum_settings)) return YEAR_IN_SECONDS;

    // Array of valid Unread cutoff periods.

    $unread_cutoff_periods = array(THIRTY_DAYS_IN_SECONDS, SIXTY_DAYS_IN_SECONDS,
                                   NINETY_DAYS_IN_SECONDS, HUNDRED_EIGHTY_DAYS_IN_SECONDS,
                                   YEAR_IN_SECONDS);

    // Fetch the unread cutoff value from the settings array

    if (isset($forum_settings['messages_unread_cutoff'])) {
        $messages_unread_cutoff = $forum_settings['messages_unread_cutoff'];
    }else {
        $messages_unread_cutoff = YEAR_IN_SECONDS;
    }

    // If unread message support is disabled we return false.

    if ($messages_unread_cutoff == UNREAD_MESSAGES_DISABLED) return false;

    // If unread message support isn't disabled we should check that
    // It is a valid value and return it or return the default of one year.

    return in_array($messages_unread_cutoff, $unread_cutoff_periods) ? $messages_unread_cutoff : YEAR_IN_SECONDS;
}

function forum_update_unread_data($unread_cutoff_stamp)
{
    if (!$db_forum_update_unread_data = db_connect()) return false;

    if (!$table_data = get_table_prefix()) return false;

    if (!is_numeric($unread_cutoff_stamp)) return false;

    if ($unread_cutoff_stamp > 0) {

        if ($forum_prefix_array = forum_get_all_prefixes()) {

            foreach($forum_prefix_array as $forum_prefix) {

                $sql = "INSERT INTO {$forum_prefix}THREAD_STATS (TID, UNREAD_PID, UNREAD_CREATED) ";
                $sql.= "SELECT POST.TID, MAX(POST.PID), MAX(POST.CREATED) FROM {$forum_prefix}POST POST ";
                $sql.= "LEFT JOIN {$forum_prefix}THREAD_STATS THREAD_STATS ON (THREAD_STATS.TID = POST.TID) ";
                $sql.= "WHERE POST.CREATED < FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()) - $unread_cutoff_stamp) ";
                $sql.= "AND (THREAD_STATS.UNREAD_PID < POST.PID OR THREAD_STATS.UNREAD_PID IS NULL) ";
                $sql.= "GROUP BY POST.TID ON DUPLICATE KEY UPDATE UNREAD_PID = VALUES(UNREAD_PID), ";
                $sql.= "UNREAD_CREATED = VALUES(UNREAD_CREATED)";

                if (!$result = db_query($sql, $db_forum_update_unread_data)) return false;

                $sql = "DELETE QUICK FROM {$forum_prefix}USER_THREAD ";
                $sql.= "USING {$forum_prefix}USER_THREAD ";
                $sql.= "LEFT JOIN {$forum_prefix}THREAD ";
                $sql.= "ON ({$forum_prefix}USER_THREAD.TID = ";
                $sql.= "{$forum_prefix}THREAD.TID) ";
                $sql.= "WHERE {$forum_prefix}THREAD.MODIFIED IS NOT NULL ";
                $sql.= "AND {$forum_prefix}THREAD.MODIFIED < ";
                $sql.= "FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()) - $unread_cutoff_stamp) ";
                $sql.= "AND ({$forum_prefix}USER_THREAD.INTEREST IS NULL ";
                $sql.= "OR {$forum_prefix}USER_THREAD.INTEREST = 0) ";

                if (!$result = db_query($sql, $db_forum_update_unread_data)) return false;
            }
        }
    }

    return true;
}

function forum_load_start_page()
{
    $webtag = get_webtag($webtag_search);

    if (@file_exists("forums/$webtag/start_main.php")) {

        $filesize = filesize("forums/$webtag/start_main.php");

        if ($filesize > 0 && @$fp = fopen("forums/$webtag/start_main.php", "r")) {

            $content = fread($fp, $filesize);
            fclose($fp);
            return $content;
        }
    }

    return false;
}

function forum_start_page_get_html($content)
{
    ob_start();

    html_draw_top();
    echo $content;
    html_draw_bottom();

    $content = ob_get_contents();

    ob_end_clean();

    return word_filter_rem_ob_tags($content);
}

function forum_save_start_page($content)
{
    $webtag = get_webtag($webtag_search);

    if (@!is_dir("forums")) @mkdir("forums", 0755);
    if (@!is_dir("forums/$webtag")) @mkdir("forums/$webtag", 0755);

    $content = forum_start_page_get_html($content);

    if (@$fp = fopen("forums/$webtag/start_main.php", "w")) {

        fwrite($fp, $content);
        fclose($fp);

        return true;
    }

    return false;
}

function forum_create($webtag, $forum_name, $owner_uid, $database_name, $access, &$error_str)
{
    // Load the language

    $lang = load_language_file();

    // Ensure the variables we've been given are valid

    if (!preg_match("/^[A-Z]{1}[A-Z0-9_]+$/", $webtag)) return false;
    if (!preg_match("/^[A-Z]{1}[A-Z0-9_]+$/i", $database_name)) return false;

    if (!is_numeric($owner_uid)) $owner_uid = 0;
    if (!is_numeric($access)) $access = 0;

    // Only users with acces to the forum tools can create / delete forums.

    if (bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

        if (($uid = bh_session_get_value('UID')) === false) return false;

        if (!$db_forum_create = db_connect()) return false;

        // Check that the WEBTAG is unique.

        $sql = "SELECT FID FROM FORUMS WHERE WEBTAG = '$webtag'";

        if (!$result = @db_query($sql, $db_forum_create)) return false;

        if (db_num_rows($result) > 0) {

            $error_str = $lang['selectedwebtagisalreadyinuse'];
            return false;
        }

        // Check for any conflicting tables.

        if ($conflicting_tables_array = install_get_table_conflicts($webtag, true, false)) {

            $error_str = $lang['selecteddatabasecontainsconflictingtables'];
            $error_str.= sprintf("
%s
\n", implode(", ", $conflicting_tables_array));

            return false;
        }

        // Create the tables

        $sql = "CREATE TABLE {$database_name}.{$webtag}_ADMIN_LOG (";
        $sql.= "  ID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  CREATED DATETIME DEFAULT NULL,";
        $sql.= "  ACTION MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  ENTRY TEXT,";
        $sql.= "  PRIMARY KEY  (ID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_BANNED (";
        $sql.= "  ID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  BANTYPE TINYINT(4) NOT NULL DEFAULT '0',";
        $sql.= "  BANDATA VARCHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  COMMENT VARCHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  PRIMARY KEY  (ID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_FOLDER (";
        $sql.= "  FID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  TITLE VARCHAR(32) DEFAULT NULL,";
        $sql.= "  DESCRIPTION VARCHAR(255) DEFAULT NULL,";
        $sql.= "  PREFIX VARCHAR(16) DEFAULT NULL,";
        $sql.= "  ALLOWED_TYPES TINYINT(3) DEFAULT NULL,";
        $sql.= "  POSITION MEDIUMINT(8) UNSIGNED DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (FID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_FORUM_LINKS (";
        $sql.= "  LID SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  POS MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  URI VARCHAR(255) DEFAULT NULL,";
        $sql.= "  TITLE VARCHAR(64) DEFAULT NULL,";
        $sql.= "  PRIMARY KEY  (LID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_LINKS (";
        $sql.= "  LID SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  FID SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  URI VARCHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  TITLE VARCHAR(64) NOT NULL DEFAULT '',";
        $sql.= "  DESCRIPTION TEXT NOT NULL,";
        $sql.= "  CREATED DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
        $sql.= "  VISIBLE CHAR(1) NOT NULL DEFAULT 'N',";
        $sql.= "  CLICKS MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (LID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_LINKS_COMMENT (";
        $sql.= "  CID SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  LID SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  CREATED DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
        $sql.= "  COMMENT TEXT NOT NULL,";
        $sql.= "  PRIMARY KEY  (CID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_LINKS_FOLDERS (";
        $sql.= "  FID SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  PARENT_FID SMALLINT(5) UNSIGNED DEFAULT NULL,";
        $sql.= "  NAME VARCHAR(32) NOT NULL DEFAULT '',";
        $sql.= "  VISIBLE CHAR(1) NOT NULL DEFAULT '',";
        $sql.= "  PRIMARY KEY  (FID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_LINKS_VOTE (";
        $sql.= "  LID SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  RATING SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  TSTAMP DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
        $sql.= "  PRIMARY KEY  (LID,UID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_POLL (";
        $sql.= "  TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  QUESTION VARCHAR(64) DEFAULT NULL,";
        $sql.= "  CLOSES DATETIME DEFAULT NULL,";
        $sql.= "  CHANGEVOTE TINYINT(1) NOT NULL DEFAULT '1',";
        $sql.= "  POLLTYPE TINYINT(1) NOT NULL DEFAULT '0',";
        $sql.= "  SHOWRESULTS TINYINT(1) NOT NULL DEFAULT '1',";
        $sql.= "  VOTETYPE TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  OPTIONTYPE TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  ALLOWGUESTS TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (TID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_POLL_VOTES (";
        $sql.= "  TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  OPTION_ID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  OPTION_NAME CHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  GROUP_ID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (TID,OPTION_ID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_POST (";
        $sql.= "  TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  REPLY_TO_PID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  FROM_UID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  TO_UID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  VIEWED DATETIME DEFAULT NULL,";
        $sql.= "  CREATED DATETIME DEFAULT NULL,";
        $sql.= "  STATUS TINYINT(4) DEFAULT '0',";
        $sql.= "  APPROVED DATETIME DEFAULT NULL,";
        $sql.= "  APPROVED_BY MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  EDITED DATETIME DEFAULT NULL,";
        $sql.= "  EDITED_BY MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  IPADDRESS VARCHAR(15) NOT NULL DEFAULT '',";
        $sql.= "  MOVED_TID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  MOVED_PID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  PRIMARY KEY  (TID,PID),";
        $sql.= "  KEY TO_UID (TO_UID),";
        $sql.= "  KEY FROM_UID (FROM_UID),";
        $sql.= "  KEY IPADDRESS (IPADDRESS, FROM_UID),";
        $sql.= "  KEY CREATED (CREATED),";
        $sql.= "  KEY APPROVED (APPROVED)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_POST_CONTENT (";
        $sql.= "  TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  CONTENT TEXT,";
        $sql.= "  PRIMARY KEY  (TID,PID),";
        $sql.= "  FULLTEXT KEY CONTENT (CONTENT)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_PROFILE_ITEM (";
        $sql.= "  PIID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  PSID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  NAME VARCHAR(64) DEFAULT NULL,";
        $sql.= "  TYPE TINYINT(3) UNSIGNED DEFAULT '0',";
        $sql.= "  OPTIONS TEXT NOT NULL, ";
        $sql.= "  POSITION MEDIUMINT(3) UNSIGNED DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (PIID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "INSERT INTO {$database_name}.{$webtag}_PROFILE_ITEM ";
        $sql.= "(PSID, NAME, TYPE, OPTIONS, POSITION) ";
        $sql.= "VALUES (1, 'Location', 0, '', 1)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "INSERT INTO {$database_name}.{$webtag}_PROFILE_ITEM ";
        $sql.= "(PSID, NAME, TYPE, OPTIONS, POSITION) ";
        $sql.= "VALUES (1, 'Age', 0, '', 2)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "INSERT INTO {$database_name}.{$webtag}_PROFILE_ITEM ";
        $sql.= "(PSID, NAME, TYPE, OPTIONS, POSITION) VALUES ";
        $sql.= "(1, 'Gender', 5, 'Male\nFemale\nUnspecified', 3)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "INSERT INTO {$database_name}.{$webtag}_PROFILE_ITEM ";
        $sql.= "(PSID, NAME, TYPE, OPTIONS, POSITION) ";
        $sql.= "VALUES (1, 'Quote', 0, '', 4)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "INSERT INTO {$database_name}.{$webtag}_PROFILE_ITEM ";
        $sql.= "(PSID, NAME, TYPE, OPTIONS, POSITION) ";
        $sql.= "VALUES (1, 'Occupation', 0, '', 5)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_PROFILE_SECTION (";
        $sql.= "  PSID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  NAME VARCHAR(64) DEFAULT NULL,";
        $sql.= "  POSITION MEDIUMINT(3) UNSIGNED DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (PSID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "INSERT INTO {$database_name}.{$webtag}_PROFILE_SECTION ";
        $sql.= "(NAME, POSITION) VALUES ('Personal', 1)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_RSS_FEEDS (";
        $sql.= "  RSSID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  NAME VARCHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  FID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  URL VARCHAR(255) DEFAULT NULL,";
        $sql.= "  PREFIX VARCHAR(16) DEFAULT NULL,";
        $sql.= "  FREQUENCY MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  LAST_RUN DATETIME DEFAULT NULL,";
        $sql.= "  PRIMARY KEY  (RSSID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_RSS_HISTORY (";
        $sql.= "  RSSID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  LINK VARCHAR(255) DEFAULT NULL,";
        $sql.= "  KEY RSSID (RSSID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_STATS (";
        $sql.= "  ID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  MOST_USERS_DATE DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
        $sql.= "  MOST_USERS_COUNT MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  MOST_POSTS_DATE DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
        $sql.= "  MOST_POSTS_COUNT MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (ID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_THREAD (";
        $sql.= "  TID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  FID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  BY_UID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  TITLE VARCHAR(64) DEFAULT NULL,";
        $sql.= "  LENGTH MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  POLL_FLAG CHAR(1) DEFAULT NULL,";
        $sql.= "  CREATED DATETIME DEFAULT NULL,";
        $sql.= "  MODIFIED DATETIME DEFAULT NULL,";
        $sql.= "  CLOSED DATETIME DEFAULT NULL,";
        $sql.= "  STICKY CHAR(1) DEFAULT NULL,";
        $sql.= "  STICKY_UNTIL DATETIME DEFAULT NULL,";
        $sql.= "  ADMIN_LOCK DATETIME DEFAULT NULL,";
        $sql.= "  PRIMARY KEY  (TID),";
        $sql.= "  KEY BY_UID (BY_UID),";
        $sql.= "  KEY STICKY (STICKY, MODIFIED), ";
        $sql.= "  KEY LENGTH (LENGTH), ";
        $sql.= "  KEY TITLE (TITLE)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_THREAD_STATS (";
        $sql.= "  TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  VIEWCOUNT MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  UNREAD_PID MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  UNREAD_CREATED DATETIME DEFAULT NULL,";
        $sql.= "  PRIMARY KEY  (TID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_THREAD_TRACK (";
        $sql.= "  TID MEDIUMINT(8) NOT NULL DEFAULT '0',";
        $sql.= "  NEW_TID MEDIUMINT(8) NOT NULL DEFAULT '0',";
        $sql.= "  CREATED DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
        $sql.= "  TRACK_TYPE TINYINT(4) NOT NULL DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (TID, NEW_TID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_USER_FOLDER (";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  FID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  INTEREST TINYINT(4) DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (UID, FID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_USER_PEER (";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PEER_UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  RELATIONSHIP TINYINT(4) DEFAULT NULL,";
        $sql.= "  PEER_NICKNAME VARCHAR(32) DEFAULT NULL,";
        $sql.= "  PRIMARY KEY  (UID,PEER_UID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_USER_POLL_VOTES (";
        $sql.= "  TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  VOTE_ID MEDIUMINT(8) NOT NULL AUTO_INCREMENT,";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  OPTION_ID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  TSTAMP DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',";
        $sql.= "  PRIMARY KEY (TID, VOTE_ID),";
        $sql.= "  KEY UID (UID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_USER_PREFS (";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  HOMEPAGE_URL VARCHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  PIC_URL VARCHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  PIC_AID CHAR(32) NOT NULL DEFAULT '',";
        $sql.= "  AVATAR_URL VARCHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  AVATAR_AID CHAR(32) NOT NULL DEFAULT '',";
        $sql.= "  EMAIL_NOTIFY CHAR(1) NOT NULL DEFAULT 'Y',";
        $sql.= "  MARK_AS_OF_INT CHAR(1) NOT NULL DEFAULT 'Y',";
        $sql.= "  POSTS_PER_PAGE VARCHAR(3) NOT NULL DEFAULT '20',";
        $sql.= "  FONT_SIZE VARCHAR(2) NOT NULL DEFAULT '10',";
        $sql.= "  STYLE VARCHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  EMOTICONS VARCHAR(255) NOT NULL DEFAULT '',";
        $sql.= "  VIEW_SIGS CHAR(1) NOT NULL DEFAULT 'Y',";
        $sql.= "  START_PAGE VARCHAR(3) NOT NULL DEFAULT '0',";
        $sql.= "  LANGUAGE VARCHAR(32) NOT NULL DEFAULT '',";
        $sql.= "  DOB_DISPLAY CHAR(1) NOT NULL DEFAULT '2',";
        $sql.= "  ANON_LOGON CHAR(1) NOT NULL DEFAULT '0',";
        $sql.= "  SHOW_STATS CHAR(1) NOT NULL DEFAULT 'Y',";
        $sql.= "  IMAGES_TO_LINKS CHAR(1) NOT NULL DEFAULT 'N',";
        $sql.= "  USE_WORD_FILTER CHAR(1) NOT NULL DEFAULT 'N',";
        $sql.= "  USE_ADMIN_FILTER CHAR(1) NOT NULL DEFAULT 'N',";
        $sql.= "  ALLOW_EMAIL CHAR(1) NOT NULL DEFAULT 'Y',";
        $sql.= "  ALLOW_PM CHAR(1) NOT NULL DEFAULT 'Y',";
        $sql.= "  SHOW_THUMBS VARCHAR(2) NOT NULL DEFAULT '2',";
        $sql.= "  ENABLE_WIKI_WORDS CHAR(1) NOT NULL DEFAULT 'Y',";
        $sql.= "  USE_MOVER_SPOILER CHAR(1) DEFAULT 'N', ";
        $sql.= "  USE_LIGHT_MODE_SPOILER CHAR(1) DEFAULT 'N', ";
        $sql.= "  USE_OVERFLOW_RESIZE CHAR(1) DEFAULT 'Y', ";
        $sql.= "  PRIMARY KEY  (UID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_USER_PROFILE (";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PIID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  ENTRY VARCHAR(255) DEFAULT NULL,";
        $sql.= "  PRIVACY TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (UID,PIID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_USER_SIG (";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  CONTENT TEXT,";
        $sql.= "  HTML CHAR(1) DEFAULT NULL,";
        $sql.= "  PRIMARY KEY  (UID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_USER_THREAD (";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  TID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  LAST_READ MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  LAST_READ_AT DATETIME DEFAULT NULL,";
        $sql.= "  INTEREST TINYINT(4) DEFAULT NULL,";
        $sql.= "  PRIMARY KEY  (UID,TID),";
        $sql.= "  KEY TID (TID),";
        $sql.= "  KEY LAST_READ (LAST_READ)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_USER_TRACK (";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  DDKEY DATETIME DEFAULT NULL,";
        $sql.= "  LAST_POST DATETIME DEFAULT NULL,";
        $sql.= "  LAST_SEARCH DATETIME DEFAULT NULL,";
        $sql.= "  LAST_SEARCH_KEYWORDS TEXT DEFAULT NULL,";
        $sql.= "  POST_COUNT MEDIUMINT(8) UNSIGNED DEFAULT NULL,";
        $sql.= "  USER_TIME_BEST DATETIME DEFAULT NULL,";
        $sql.= "  USER_TIME_TOTAL DATETIME DEFAULT NULL,";
        $sql.= "  USER_TIME_UPDATED DATETIME DEFAULT NULL,";
        $sql.= "  PRIMARY KEY  (UID)";
        $sql.= ") TYPE=MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        $sql = "CREATE TABLE {$database_name}.{$webtag}_WORD_FILTER (";
        $sql.= "  UID MEDIUMINT(8) UNSIGNED NOT NULL,";
        $sql.= "  FID MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,";
        $sql.= "  FILTER_NAME VARCHAR(255) NOT NULL,";
        $sql.= "  MATCH_TEXT TEXT NOT NULL,";
        $sql.= "  REPLACE_TEXT TEXT NOT NULL,";
        $sql.= "  FILTER_TYPE TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  FILTER_ENABLED TINYINT(3) UNSIGNED NOT NULL DEFAULT '0',";
        $sql.= "  PRIMARY KEY  (UID, FID)";
        $sql.= ") TYPE = MYISAM";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return;
        }

        // Save Webtag, Database name and Access Level.

        $sql = "INSERT INTO FORUMS (WEBTAG, OWNER_UID, DATABASE_NAME, ACCESS_LEVEL) ";
        $sql.= "VALUES ('$webtag', '$owner_uid', '$database_name', $access)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete_tables($webtag, $database_name);

            if (defined("BEEHIVE_INSTALL_NOWARN")) {
                db_trigger_error($sql, $db_forum_create);
            }

            return false;
        }

        // Get the new FID so we can save the settings

        $forum_fid = db_insert_id($db_forum_create);

        // Create General Folder

        $sql = "INSERT INTO {$database_name}.{$webtag}_FOLDER (TITLE, DESCRIPTION, ALLOWED_TYPES, POSITION) ";
        $sql.= "VALUES ('General', NULL, NULL, 0)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete($forum_fid);
            return false;
        }

        $folder_fid = db_insert_id($db_forum_create);

        // Create folder permissions

        $sql = "INSERT INTO GROUP_PERMS (GID, FORUM, FID, PERM) ";
        $sql.= "VALUES (0, '$forum_fid', '$folder_fid', 14588);";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete($forum_fid);
            return false;
        }

        // Add some default forum links

        $sql = "INSERT INTO {$database_name}.{$webtag}_FORUM_LINKS (POS, TITLE, URI) ";
        $sql.= "VALUES (2, 'Project Beehive Home', 'http://www.beehiveforum.net/')";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete($forum_fid);
            return false;
        }

        $sql = "INSERT INTO {$database_name}.{$webtag}_FORUM_LINKS (POS, TITLE, URI) ";
        $sql.= "VALUES (2, 'Teh Forum', 'http://www.tehforum.co.uk/forum/')";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete($forum_fid);
            return false;
        }

        // Create user permissions for forum leader

        if (!forum_apply_user_permissions($forum_fid, $owner_uid)) {

            forum_delete($forum_fid);
            return false;
        }

        // Create Welcome thread and post.

        $sql = "INSERT INTO {$database_name}.{$webtag}_THREAD ";
        $sql.= "(FID, BY_UID, TITLE, LENGTH, POLL_FLAG, CREATED, MODIFIED, CLOSED, STICKY, STICKY_UNTIL, ADMIN_LOCK) ";
        $sql.= "VALUES (1, 1, 'Welcome', 1, 'N', NOW(), NOW(), NULL, 'N', NULL, NULL)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete($forum_fid);
            return false;
        }

        $sql = "INSERT INTO {$database_name}.{$webtag}_POST ";
        $sql.= "(TID, REPLY_TO_PID, FROM_UID, TO_UID, VIEWED, CREATED, STATUS, APPROVED, ";
        $sql.= "APPROVED_BY, EDITED, EDITED_BY, IPADDRESS) VALUES (1, 0, 1, 0, NULL, NOW(), ";
        $sql.= "0, NOW(), 1, NULL, 0, '')";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete($forum_fid);
            return false;;
        }

        $sql = "INSERT INTO {$database_name}.{$webtag}_POST_CONTENT (TID, PID, CONTENT) ";
        $sql.= "VALUES (1, 1, 'Welcome to your new Beehive Forum')";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete($forum_fid);
            return false;;
        }

        // Create Top Level Links Folder

        $sql = "INSERT INTO {$database_name}.{$webtag}_LINKS_FOLDERS ";
        $sql.= "(PARENT_FID, NAME, VISIBLE) VALUES (NULL, 'Top Level', 'Y')";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete($forum_fid);
            return false;
        }

        // Store Forum settings

        $forum_settings = array('wiki_integration_uri'    => 'http://en.wikipedia.org/wiki/[WikiWord]',
                                'enable_wiki_quick_links' => 'Y',
                                'enable_wiki_integration' => 'N',
                                'minimum_post_frequency'  => '0',
                                'maximum_post_length'     => '6226',
                                'post_edit_time'          => '0',
                                'allow_post_editing'      => 'Y',
                                'require_post_approval'   => 'N',
                                'forum_dl_saving'         => 'Y',
                                'forum_timezone'          => '27',
                                'default_language'        => 'en',
                                'default_emoticons'       => 'default',
                                'default_style'           => 'Default',
                                'forum_keywords'          => 'A Beehive Forum, Beehive Forum, Project Beehive Forum',
                                'forum_desc'              => 'A Beehive Forum',
                                'forum_email'             => 'admin@abeehiveforum.net',
                                'forum_name'              => $forum_name,
                                'show_links'              => 'Y',
                                'allow_polls'             => 'Y',
                                'show_stats'              => 'Y',
                                'allow_search_spidering'  => 'Y',
                                'guest_account_enabled'   => 'Y',
                                'forum_links_top_link'    => 'Forum Links:');

        foreach ($forum_settings as $sname => $svalue) {

            $sname = db_escape_string($sname);
            $svalue = db_escape_string($svalue);

            $sql = "INSERT INTO FORUM_SETTINGS (FID, SNAME, SVALUE) ";
            $sql.= "VALUES ($forum_fid, '$sname', '$svalue')";

            if (!$result = @db_query($sql, $db_forum_create)) {

                forum_delete($forum_fid);
                return false;
            }
        }

        // Make sure at least the current user can access the forum
        // even if it's not protected.

        $sql = "INSERT INTO USER_FORUM (UID, FID, ALLOWED) VALUES('$uid', $forum_fid, 1)";

        if (!$result = @db_query($sql, $db_forum_create)) {

            forum_delete($forum_fid);
            return false;
        }

        return $forum_fid;
    }

    return false;
}

function forum_update($fid, $forum_name, $owner_uid, $access_level)
{
    if (!is_numeric($fid)) return false;
    if (!is_numeric($owner_uid)) return false;
    if (!is_numeric($access_level)) return false;

    if (bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

        if (!$db_forum_update = db_connect()) return false;

        $forum_name = db_escape_string($forum_name);

        $sql = "UPDATE LOW_PRIORITY FORUMS SET ACCESS_LEVEL = '$access_level', ";
        $sql.= "OWNER_UID = '$owner_uid' WHERE FID = '$fid'";

        if (!$result = db_query($sql, $db_forum_update)) return false;

        $sql = "UPDATE LOW_PRIORITY FORUM_SETTINGS SET SVALUE = '$forum_name' ";
        $sql.= "WHERE SNAME = 'forum_name' AND FID = '$fid'";

        if (!$result = db_query($sql, $db_forum_update)) return false;

        if (db_affected_rows($result) < 1) {

            $sql = "INSERT IGNORE INTO FORUM_SETTINGS (FID, SNAME, SVALUE) ";
            $sql.= "VALUES ('$fid', 'forum_name', '$forum_name')";

            if (!$result = db_query($sql, $db_forum_update)) return false;
        }

        return true;
    }

    return false;
}

function forum_apply_user_permissions($forum_fid, $uid)
{
    if (!$db_forum_apply_user_permissions = db_connect()) return false;

    if (!is_numeric($forum_fid)) return false;
    if (!is_numeric($uid)) return false;

    $forum_user_perms = USER_PERM_ADMIN_TOOLS | USER_PERM_FOLDER_MODERATE;

    $sql = "INSERT INTO GROUPS (FORUM, GROUP_NAME, GROUP_DESC, AUTO_GROUP) ";
    $sql.= "VALUES ('$forum_fid', NULL, NULL, 1);";

    if (!$result = db_query($sql, $db_forum_apply_user_permissions)) return false;

    $new_gid = db_insert_id($db_forum_apply_user_permissions);

    $sql = "INSERT INTO GROUP_PERMS (GID, FORUM, FID, PERM) ";
    $sql.= "VALUES ('$new_gid', '$forum_fid', 0, '$forum_user_perms');";

    if (!$result = db_query($sql, $db_forum_apply_user_permissions)) return false;

    $sql = "INSERT INTO GROUP_USERS VALUES ($new_gid, $uid);";

    if (!$result = db_query($sql, $db_forum_apply_user_permissions)) return false;

    return true;
}

function forum_delete($fid)
{
    if (bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

        if (!$db_forum_delete = db_connect()) return false;

        if (!is_numeric($fid)) return false;

        $sql = "SELECT WEBTAG, DATABASE_NAME FROM FORUMS WHERE FID = '$fid'";

        if (!$result = db_query($sql, $db_forum_delete)) return false;

        if (db_num_rows($result) > 0) {

            list($webtag, $database_name) = db_fetch_array($result, DB_RESULT_NUM);

            $sql = "DELETE QUICK FROM FORUMS WHERE FID = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            $sql = "DELETE QUICK FROM FORUM_SETTINGS WHERE FID = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            $sql = "DELETE QUICK FROM GROUP_PERMS WHERE FORUM = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            $sql = "SELECT GID FROM GROUPS WHERE FORUM = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            while($user_perms = db_fetch_array($result)) {

                $sql = "DELETE QUICK FROM GROUP_USERS WHERE GID = '{$user_perms['GID']}'";

                if (!$result_remove = db_query($sql, $db_forum_delete)) return false;
            }

            $sql = "DELETE QUICK FROM GROUPS WHERE FORUM = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            $sql = "DELETE QUICK FROM USER_FORUM WHERE FID = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            $sql = "DELETE QUICK FROM VISITOR_LOG WHERE FORUM = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            $sql = "DELETE QUICK FROM SEARCH_RESULTS WHERE FORUM = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            $sql = "SELECT AID FROM POST_ATTACHMENT_IDS WHERE FID = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            while ($attachment_data = db_fetch_array($result)) {
                delete_attachment_by_aid($attachment_data['AID']);
            }

            $sql = "DELETE QUICK FROM POST_ATTACHMENT_IDS WHERE FID = '$fid'";

            if (!$result = db_query($sql, $db_forum_delete)) return false;

            if (forum_delete_tables($webtag, $database_name)) return true;
        }
    }

    return false;
}

function forum_delete_tables($webtag, $database_name)
{
    // Ensure the variables we've been given are valid

    if (!preg_match("/^[A-Z0-9_]+$/", $webtag)) return false;
    if (!preg_match("/^[A-Z0-9_]+$/i", $database_name)) return false;

    // Only users with acces to the forum tools can create / delete forums.

    if (bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

        if (!$db_forum_delete_tables = db_connect()) return false;

        $table_array = array('ADMIN_LOG',     'BANNED',          'FOLDER',
                             'FORUM_LINKS',   'GROUPS',          'GROUP_PERMS',
                             'GROUP_USERS',   'LINKS',           'LINKS_COMMENT',
                             'LINKS_FOLDERS', 'LINKS_VOTE',      'POLL',
                             'POLL_VOTES',    'POST',            'POST_CONTENT',
                             'PROFILE_ITEM',  'PROFILE_SECTION', 'RSS_FEEDS',
                             'RSS_HISTORY',   'STATS',           'THREAD',
                             'THREAD_STATS',  'THREAD_TRACK',    'USER_TRACK',
                             'USER_FOLDER',   'USER_PEER',       'USER_POLL_VOTES',
                             'USER_PREFS',    'USER_PROFILE',    'USER_SIG',
                             'USER_THREAD',   'VISITOR_LOG',     'WORD_FILTER');

        foreach ($table_array as $table_name) {

            $sql = "DROP TABLE IF EXISTS {$database_name}.{$webtag}_{$table_name}";

            if (!$result = db_query($sql, $db_forum_delete_tables)) return false;
        }

        return true;
    }

    return false;
}

function forum_update_access($fid, $access)
{
    if (!is_numeric($fid)) return false;
    if (!is_numeric($access)) return false;

    if (bh_session_check_perm(USER_PERM_ADMIN_TOOLS, 0) || bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

        if (($uid = bh_session_get_value('UID')) === false) return false;

        if (!$db_forum_update_access = db_connect()) return false;

        $sql = "UPDATE LOW_PRIORITY FORUMS SET ACCESS_LEVEL = '$access' ";
        $sql.= "WHERE FID = '$fid'";

        if (!$result = db_query($sql, $db_forum_update_access)) return false;

        $sql = "SELECT UID FROM USER_FORUM WHERE FID = '$fid' ";
        $sql.= "AND UID = '$uid' LIMIT 0, 1";

        if (!$result = db_query($sql, $db_forum_update_access)) return false;

        if (db_num_rows($result) > 0) {

            $sql = "UPDATE LOW_PRIORITY USER_FORUM SET ALLOWED = 1 WHERE UID = '$uid' AND FID = '$fid'";

            if (!$result = db_query($sql, $db_forum_update_access)) return false;

        }else {

            $sql = "INSERT IGNORE INTO USER_FORUM (UID, FID, ALLOWED) ";
            $sql.= "VALUES ('$uid', '$fid', '1')";

            if (!$result = db_query($sql, $db_forum_update_access)) return false;
        }

        return true;
    }

    return false;
}

function forum_update_password($fid, $password)
{
    if (!$db_forum_update_password = db_connect()) return false;

    if (!is_numeric($fid)) return false;

    if (bh_session_check_perm(USER_PERM_ADMIN_TOOLS, 0) || bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

        $password = db_escape_string(md5($password));

        $sql = "UPDATE LOW_PRIORITY FORUMS SET FORUM_PASSWD = '$password' ";
        $sql.= "WHERE FID = '$fid'";

        if (!$result = db_query($sql, $db_forum_update_password)) return false;

        return true;
    }

    return false;
}

function forum_get($fid)
{
    if (!is_numeric($fid)) return false;

    if (bh_session_check_perm(USER_PERM_ADMIN_TOOLS, 0)) {

        if (!$db_forum_get = db_connect()) return false;

        $sql = "SELECT FID, WEBTAG, OWNER_UID, DATABASE_NAME, DEFAULT_FORUM, ";
        $sql.= "ACCESS_LEVEL, FORUM_PASSWD FROM FORUMS WHERE FID = '$fid'";

        if (!$result = db_query($sql, $db_forum_get)) return false;

        if (db_num_rows($result) > 0) {

            $forum_get_array = db_fetch_array($result);
            $forum_get_array['FORUM_SETTINGS'] = array();

            if (isset($forum_get_array['OWNER_UID'])) {

                if ($forum_leader = user_get_logon($forum_get_array['OWNER_UID'])) {

                    $forum_get_array['FORUM_SETTINGS']['forum_leader'] = $forum_leader;
                }
            }

            $sql = "SELECT SNAME, SVALUE FROM FORUM_SETTINGS WHERE FID = '$fid'";

            if (!$result = db_query($sql, $db_forum_get)) return false;

            while ($forum_data = db_fetch_array($result)) {
                $forum_get_array['FORUM_SETTINGS'][$forum_data['SNAME']] = $forum_data['SVALUE'];
            }

            return $forum_get_array;
        }
    }

    return false;
}

function forum_get_permissions($fid, $offset = 0)
{
    if (!$db_forum_get_permissions = db_connect()) return false;

    if (!is_numeric($fid)) return false;
    if (!is_numeric($offset)) $offset = 0;

    $perms_user_array = array();

    $sql = "SELECT SQL_CALC_FOUND_ROWS USER.UID, USER.LOGON, USER.NICKNAME FROM USER USER ";
    $sql.= "LEFT JOIN USER_FORUM USER_FORUM ON (USER_FORUM.UID = USER.UID) ";
    $sql.= "WHERE USER_FORUM.FID = '$fid' AND USER_FORUM.ALLOWED = 1 ";
    $sql.= "LIMIT $offset, 20";

    if (!$result = db_query($sql, $db_forum_get_permissions)) return false;

    // Fetch the number of total results

    $sql = "SELECT FOUND_ROWS() AS ROW_COUNT";

    if (!$result_count = db_query($sql, $db_forum_get_permissions)) return false;

    list($perms_user_count) = db_fetch_array($result_count, DB_RESULT_NUM);

    if (db_num_rows($result) > 0) {

        while ($user_data = db_fetch_array($result)) {

            if (isset($user_data['LOGON']) && isset($user_data['PEER_NICKNAME'])) {
                if (!is_null($user_data['PEER_NICKNAME']) && strlen($user_data['PEER_NICKNAME']) > 0) {
                    $user_data['NICKNAME'] = $user_data['PEER_NICKNAME'];
                }
            }

            if (!isset($user_data['LOGON'])) $user_data['LOGON'] = $lang['unknownuser'];
            if (!isset($user_data['NICKNAME'])) $user_data['NICKNAME'] = "";

            $perms_user_array[] = $user_data;
        }

    }else if ($perms_user_count > 0) {

        $offset = floor(($group_user_count - 1) / 10) * 10;
        return perm_group_get_users($gid, $offset);
    }

    return array('user_count' => $perms_user_count,
                 'user_array' => $perms_user_array);
}

function forum_update_default($fid)
{
    if (!is_numeric($fid)) return false;

    if (bh_session_check_perm(USER_PERM_FORUM_TOOLS, 0)) {

        if (!$db_forum_get_permissions = db_connect()) return false;

        $sql = "UPDATE LOW_PRIORITY FORUMS SET DEFAULT_FORUM = 0";

        if (!$result = db_query($sql, $db_forum_get_permissions)) return false;

        if ($fid > 0) {

            $sql = "UPDATE LOW_PRIORITY FORUMS SET DEFAULT_FORUM = 1 WHERE FID = '$fid'";

            if (!$result = db_query($sql, $db_forum_get_permissions)) return false;
        }

        return $result;
    }

    return false;
}

function forum_get_post_count($webtag)
{
    if (!$db_forum_get_post_count = db_connect()) return false;

    if (preg_match("/^[a-z0-9_]+$/i", $webtag) < 1) return 0;

    $sql = "SELECT COUNT(PID) AS POST_COUNT FROM {$webtag}_POST POST ";

    if (!$result_post_count = db_query($sql, $db_forum_get_post_count)) return false;

    if (db_num_rows($result_post_count) > 0) {

        $$forum_data = db_fetch_array($result_post_count);
        return $$forum_data['POST_COUNT'];
    }

    return 0;
}

function forum_search_array_clean($forum_search)
{
    return db_escape_string(trim(str_replace("%", "", $forum_search)));
}

function forum_search($forum_search, $offset)
{
    if (!$db_forum_search = db_connect()) return false;

    if (!is_numeric($offset)) return false;

    if (($uid = bh_session_get_value('UID')) === false) return false;

    $lang = load_language_file();

    // Array to hold our forums in.

    $forums_array = array();

    if (strlen(trim($forum_search)) > 0) {

        $forum_search_array = explode(";", $forum_search);
        $forum_search_array = array_map('forum_search_array_clean', $forum_search_array);

        $forum_search_webtag = implode("%' OR FORUMS.WEBTAG LIKE '%", $forum_search_array);
        $forum_search_svalue = implode("%' OR FORUM_SETTINGS.SVALUE LIKE '%", $forum_search_array);

        $sql = "SELECT SQL_CALC_FOUND_ROWS CONCAT(FORUMS.DATABASE_NAME, '.', FORUMS.WEBTAG, '_') AS PREFIX, ";
        $sql.= "FORUMS.FID, FORUMS.ACCESS_LEVEL, USER_FORUM.INTEREST FROM FORUM_SETTINGS ";
        $sql.= "LEFT JOIN USER_FORUM ON (USER_FORUM.FID = FORUM_SETTINGS.FID ";
        $sql.= "AND USER_FORUM.UID = '$uid') LEFT JOIN FORUMS ON (FORUMS.FID = FORUM_SETTINGS.FID) ";
        $sql.= "WHERE FORUMS.ACCESS_LEVEL > -1 AND (FORUMS.WEBTAG LIKE ";
        $sql.= "'%$forum_search_webtag%' OR FORUM_SETTINGS.SVALUE LIKE ";
        $sql.= "'%$forum_search_svalue%') GROUP BY FORUMS.FID ";
        $sql.= "LIMIT $offset, 10";

        if (!$result_forums = db_query($sql, $db_forum_search)) return false;

        // Fetch the number of total results

        $sql = "SELECT FOUND_ROWS() AS ROW_COUNT";

        if (!$result_count = db_query($sql, $db_forum_search)) return false;

        list($forums_count) = db_fetch_array($result_count, DB_RESULT_NUM);

        if (db_num_rows($result_forums) > 0) {

            while ($forum_data = db_fetch_array($result_forums)) {

                $forum_fid = $forum_data['FID'];

                $forum_settings = forum_get_settings_by_fid($forum_fid);

                foreach($forum_settings as $key => $value) {

                    if (!isset($forum_data[strtoupper($key)])) {

                        $forum_data[strtoupper($key)] = $value;
                    }
                }

                // Check the forum name is set. If it isn't set it to 'A Beehive Forum'

                if (!isset($forum_data['FORUM_NAME']) || strlen(trim($forum_data['FORUM_NAME'])) < 1) {
                    $forum_data['FORUM_NAME'] = "A Beehive Forum";
                }

                // Check the forum description variable is set.

                if (!isset($forum_data['FORUM_DESC'])) {
                    $forum_data['FORUM_DESC'] = "";
                }

                // Unread cut-off stamp.

                $unread_cutoff_stamp = forum_process_unread_cutoff($forum_settings);

                // Get available folders for queries below

                $folders = folder_get_available_by_forum($forum_fid);

                // User relationship constants

                $user_ignored = USER_IGNORED;
                $user_ignored_completely = USER_IGNORED_COMPLETELY;

                // Get any unread messages

                if (is_numeric($unread_cutoff_stamp) && $unread_cutoff_stamp !== false) {

                    $sql = "SELECT SUM(THREAD.LENGTH) - SUM(COALESCE(USER_THREAD.LAST_READ, 0)) ";
                    $sql.= "AS UNREAD_MESSAGES FROM {$forum_data['PREFIX']}THREAD THREAD ";
                    $sql.= "LEFT JOIN {$forum_data['PREFIX']}USER_THREAD USER_THREAD ";
                    $sql.= "ON (USER_THREAD.TID = THREAD.TID AND USER_THREAD.UID = '$uid') ";
                    $sql.= "WHERE THREAD.FID IN ($folders) ";
                    $sql.= "AND (THREAD.MODIFIED > FROM_UNIXTIME(UNIX_TIMESTAMP(NOW()) - ";
                    $sql.= "$unread_cutoff_stamp) OR $unread_cutoff_stamp = 0) ";

                    if (!$result_unread_count = db_query($sql, $db_forum_search)) return false;

                    list($unread_messages) = db_fetch_array($result_unread_count, DB_RESULT_NUM);

                    $forum_data['UNREAD_MESSAGES'] = $unread_messages;

                }else {

                    $forum_data['UNREAD_MESSAGES'] = 0;
                }

                // Total number of messages

                $sql = "SELECT SUM(THREAD.LENGTH) AS NUM_MESSAGES ";
                $sql.= "FROM {$forum_data['PREFIX']}THREAD THREAD ";
                $sql.= "WHERE THREAD.FID IN ($folders) ";

                if (!$result_messages_count = db_query($sql, $db_forum_search)) return false;

                $num_messages_data = db_fetch_array($result_messages_count);

                if (!isset($num_messages_data['NUM_MESSAGES']) || is_null($num_messages_data['NUM_MESSAGES'])) {
                    $forum_data['NUM_MESSAGES'] = 0;
                }else {
                    $forum_data['NUM_MESSAGES'] = $num_messages_data['NUM_MESSAGES'];
                }

                // Get unread to me message count

                $sql = "SELECT COUNT(POST.PID) AS UNREAD_TO_ME ";
                $sql.= "FROM {$forum_data['PREFIX']}THREAD THREAD ";
                $sql.= "LEFT JOIN {$forum_data['PREFIX']}POST POST ";
                $sql.= "ON (POST.TID = THREAD.TID) WHERE THREAD.FID IN ($folders) ";
                $sql.= "AND POST.TO_UID = '$uid' AND POST.VIEWED IS NULL ";

                if (!$result_unread_to_me = db_query($sql, $db_forum_search)) return false;

                $post_count_data = db_fetch_array($result_unread_to_me);

                if (!isset($post_count_data['UNREAD_TO_ME']) || is_null($post_count_data['UNREAD_TO_ME'])) {
                    $forum_data['UNREAD_TO_ME'] = 0;
                }else {
                    $forum_data['UNREAD_TO_ME'] = $post_count_data['UNREAD_TO_ME'];
                }

                // Sometimes the USER_THREAD table might have a higher count that the thread
                // length due to table corruption. I've only seen this on the SF provided
                // webspace but none the less we do this check here anyway.

                if ($forum_data['NUM_MESSAGES'] < 0) $forum_data['NUM_MESSAGES'] = 0;
                if ($forum_data['UNREAD_MESSAGES'] < 0) $forum_data['UNREAD_MESSAGES'] = 0;
                if ($forum_data['UNREAD_TO_ME'] < 0) $forum_data['UNREAD_TO_ME'] = 0;

                // Get Last Visited

                $sql = "SELECT UNIX_TIMESTAMP(LAST_VISIT) AS LAST_VISIT FROM USER_FORUM ";
                $sql.= "WHERE UID = '$uid' AND FID = '$forum_fid' ";
                $sql.= "AND LAST_VISIT IS NOT NULL AND LAST_VISIT > 0";

                if (!$result_last_visit = db_query($sql, $db_forum_search)) return false;

                $user_last_visit_data = db_fetch_array($result_last_visit);

                if (!isset($user_last_visit_data['LAST_VISIT']) || is_null($user_last_visit_data['LAST_VISIT'])) {
                    $forum_data['LAST_VISIT'] = 0;
                }else {
                    $forum_data['LAST_VISIT'] = $user_last_visit_data['LAST_VISIT'];
                }

                $forums_array[] = $forum_data;
            }

        }else if ($forums_count > 0) {

            $offset = floor(($forums_count - 1) / 10) * 10;
            return forum_search($forum_search, $offset);
        }
    }

    return array('forums_array' => $forums_array,
                 'forums_count' => $forums_count);
}

function forum_get_all_prefixes()
{
    if (!$db_forum_get_all_prefixes = db_connect()) return false;

    $sql = "SELECT CONCAT(DATABASE_NAME, '.', WEBTAG, '_') AS PREFIX, ";
    $sql.= "FID FROM FORUMS ";

    if (!$result = db_query($sql, $db_forum_get_all_prefixes)) return false;

    if (db_num_rows($result) > 0) {

        $prefix_array = array();

        while ($forum_data = db_fetch_array($result)) {
            $prefix_array[$forum_data['FID']] = $forum_data['PREFIX'];
        }

        return $prefix_array;
    }

    return false;
}

function forum_get_all_webtags()
{
    if (!$db_forum_get_all_webtags = db_connect()) return false;

    $sql = "SELECT FID, WEBTAG FROM FORUMS ";

    if (!$result = db_query($sql, $db_forum_get_all_webtags)) return false;

    if (db_num_rows($result) > 0) {

        $webtag_array = array();

        while ($forum_data = db_fetch_array($result)) {
            $webtag_array[$forum_data['FID']] = $forum_data['WEBTAG'];
        }

        return $webtag_array;
    }

    return false;
}

function forum_get_all_fids()
{
    if (!$db_forum_get_all_fids = db_connect()) return false;

    $sql = "SELECT FID FROM FORUMS";

    if (!$result = db_query($sql, $db_forum_get_all_fids)) return false;

    if (db_num_rows($result) > 0) {

        $fids_array = array();

        while ($forum_data = db_fetch_array($result)) {
            $fids_array[] = $forum_data['FID'];
        }

        return $fids_array;
    }

    return false;
}

function forum_update_last_visit($uid)
{
    if (!$db_forum_update_last_visit = db_connect()) return false;

    if (!is_numeric($uid)) return false;

    if (!$table_data = get_table_prefix()) return false;

    $forum_fid = $table_data['FID'];

    if ($uid > 0) {

        $sql = "SELECT LAST_VISIT FROM USER_FORUM WHERE UID = '$uid'";
        $sql.= "AND FID = '$forum_fid'";

        if (!$result = db_query($sql, $db_forum_update_last_visit)) return false;

        if (db_num_rows($result) > 0) {

            $sql = "UPDATE LOW_PRIORITY USER_FORUM SET LAST_VISIT = NOW() ";
            $sql.= "WHERE UID = '$uid' AND FID = '$forum_fid'";

        }else {

            $sql = "INSERT INTO USER_FORUM (UID, FID, LAST_VISIT) ";
            $sql.= "VALUES ('$uid', '$forum_fid', NOW())";
        }

        if (!$result = db_query($sql, $db_forum_update_last_visit)) return false;
    }

    return true;
}

function forums_get_available_dbs()
{
    if (!$db_forums_get_available_dbs = db_connect()) return false;

    $sql = "SHOW DATABASES";

    if (!$result = db_query($sql, $db_forums_get_available_dbs)) return false;

    if (db_num_rows($result) > 0) {

        $database_array = array();

        while ($database = db_fetch_array($result)) {

            if (!stristr('information_schema', $database['Database'])) {

                $database_array[$database['Database']] = $database['Database'];
            }
        }

        return $database_array;
    }

    return false;
}

function forums_get_available_count()
{
    if (!$db_forums_get_available_count = db_connect()) return false;

    if (($uid = bh_session_get_value('UID')) === false) return 0;

    $sql = "SELECT COUNT(FORUMS.FID) FROM FORUMS FORUMS ";
    $sql.= "LEFT JOIN USER_FORUM USER_FORUM ON (USER_FORUM.FID = FORUMS.FID ";
    $sql.= "AND USER_FORUM.UID = '$uid') WHERE FORUMS.ACCESS_LEVEL = 0 ";
    $sql.= "OR FORUMS.ACCESS_LEVEL = 2 OR (FORUMS.ACCESS_LEVEL = 1 ";
    $sql.= "AND USER_FORUM.ALLOWED = 1) ";

    if (!$result = db_query($sql, $db_forums_get_available_count)) return false;

    if (db_num_rows($result) > 0) {

        list($forum_available_count) = db_fetch_array($result, DB_RESULT_NUM);
        return $forum_available_count;
    }

    return false;
}

// Forum self-preservation functions. Randomly picks a function to
// run which helps preserve functionality of Beehive.

function forum_perform_self_clean()
{
    $forum_self_clean_functions_array = array('update_stats',
                                              'pm_system_prune_folders',
                                              'bh_remove_stale_sessions',
                                              'thread_auto_prune_unread_data',
                                              'captcha_clean_up');

    $forum_self_clean_prob = intval(forum_get_setting('forum_self_clean_prob', false, 1000));

    if ($forum_self_clean_prob < 1) $forum_self_clean_prob = 1;
    if ($forum_self_clean_prob > 1000) $forum_self_clean_prob = 1000;

    if (($mt_result = mt_rand(1, $forum_self_clean_prob)) == 1) {

        $forum_self_clean_function = mt_rand(0, sizeof($forum_self_clean_functions_array) - 1);

        if (isset($forum_self_clean_functions_array[$forum_self_clean_function])
          && function_exists($forum_self_clean_functions_array[$forum_self_clean_function])) {

            return $forum_self_clean_functions_array[$forum_self_clean_function]();
        }
    }

    return false;
}

?>

redpajama_set_name: RedPajamaGithub


text:
Gladiolus bilineatus är en irisväxtart som beskrevs av Gwendoline Joyce Lewis. Gladiolus bilineatus ingår i släktet sabelliljor, och familjen irisväxter. Inga underarter finns listade i Catalogue of Life.

Källor

Sabelliljor
bilineatus

redpajama_set_name: RedPajamaWikipedia


1	jplist-folder-All-Posts-27105 Car-Dealer-Battle-Cards-Car-Dealer-Battle-Cards	jplist-topic-Auto jplist-topic-Battle-Card jplist-topic-Car	0	03/26/2018 09:49:48	Questions to Ask •Describe how you light the parking lot and showroom. •Have you thought of converting to LED lights? •Would you be willing to let us analyze your lighting costs?
4	jplist-folder-All-Posts-27105 Promotion-Promotion	jplist-topic-2018 jplist-topic-Promotion jplist-topic-Spiff	0	02/22/2018 09:17:16	Paradise and a Porsche! $2M in sales gets you a trip to Paradise. $10M in sales, gets you a Porsche!
5	jplist-folder-All-Posts-27105 User-Guide-User-Guide	jplist-topic-Partner jplist-topic-Referral-Program	0	02/14/2018 10:07:41	Agents earn some of the highest commissions on the sale with the average check at $30K. Add a recurring commission with IoT lighting services.
7	jplist-folder-All-Posts-27105 Case-Study-Case-Study	jplist-topic-Agent-Referral jplist-topic-Area-Light jplist-topic-Aviation jplist-topic-Case-Study jplist-topic-High-Bay jplist-topic-Priester jplist-topic-Referral jplist-topic-Testimonial jplist-topic-Troffer	0	01/03/2018 13:08:25	Priester Aviation EnergyWare LED install, one sheet case study. Referred by an agent.
8	jplist-folder-All-Posts-27105 In-Person-Event-In-Person-Event	jplist-topic-EnergyWare jplist-topic-Light-Show	Long-Beach	02/13/2018 02/14/2018 02/15/2018 0	12/19/2017 15:34:35	ROI on your training or exhibiting budget is of paramount importance and it is the goal of Strategies in Light, The LED Show and Lightspace California to ensure that every attendee and exhibitor benefits from the latest information and face-to-face networking opportunities, all while enjoying an overall first-class experience from the time you arrive, to when you depart.
9	jplist-folder-All-Posts-27105 Research-Report-Research-Report	jplist-topic-Industries	0	12/04/2017 15:15:00	Industries for existing EnergyWare clients.
10	jplist-folder-All-Posts-27105 Webinar--Recorded--Webinar--Recorded-	jplist-topic-EnergyWare	0	09/13/2017 15:08:31	Your customers may be spending thousands of dollars in wasted energy expense just by having the wrong lighting? We are going to show you a way to introduce energy efficient lighting, save your customer thousands, and really amp up your commissions for making the connection.
11	jplist-folder-All-Posts-27105 Article-Article	jplist-topic-Audit jplist-topic-Energy jplist-topic-Lighting	0	08/30/2017 10:08:53	EnergyWare will provide a free audit for each customer and each of its locations.
12	jplist-folder-All-Posts-27105 Article-Article	jplist-topic-Energy jplist-topic-Facts jplist-topic-Light-Bulbs jplist-topic-Lighting jplist-topic-Mercury	0	08/30/2017 10:06:41	EnergyWare is one of the most EXPERIENCED and RESPECTED energy efficiency firms in the United States. Customers from Los Angeles to Washington, D.C. have entrusted our organization to enhance their lighting infrastructure. We design and implement with the intention of exceeding our clients' expectations for safety, quality, savings, and overall value.
13	jplist-folder-All-Posts-27105 Case-Study-Case-Study	jplist-topic-Lighting	0	08/28/2017 16:05:48	Onelife Fitness is a premium provider of an innovative, community focused, convenient, friendly, and affordable fitness centers. These centers are created to appeal to everyone that benefits from regular exercise such as sharper mental acuity, lower cholesterol, reduced street, stronger immunities, greater productivity balance, and ultimately a greater quality of life. Poor lighting would certainly take away from this mission.
14	jplist-folder-All-Posts-27105 Product-Literature-Product-Literature	jplist-topic-Fixtures jplist-topic-Lighting jplist-topic-New-Lighting	0	08/24/2017 16:07:11	Used in new construction or areas where lighting is surface mounted. As fixtures age, some customers look not only for cost savings but a refresh to the aesthetics. New fixtures take more time to install but are the best option for aged surface mounts.
15	jplist-folder-All-Posts-27105 Product-Literature-Product-Literature	jplist-topic-Lighting jplist-topic-Recess-Cans	0	08/24/2017 16:05:51	The majority of recessed light fixtures, as the name suggests, are recessed inside of a ceiling with an internal downlight fixed for the accurate orientation of lighting. Options vary widely from decorative to more traditional. These lights are suitable for new construction or retrofit.
16	jplist-folder-All-Posts-27105 Product-Literature-Product-Literature	jplist-topic-Flood-Lights jplist-topic-Lighting	0	08/24/2017 16:05:02	These fixtures are designed for applications that require a narrow beam of high-lumen output. Typically used for stage lighting, parking lot lighting, stadiums, and ground to aerial use.
17	jplist-folder-All-Posts-27105 Product-Literature-Product-Literature	jplist-topic-Highbays	0	08/24/2017 16:02:06	Traditionally used for areas that are 20 feet or higher. Most commonly seen in retail, warehouses, gymnasiums, and industrial facilities. Lumen output can vary, along with longevity. For ceilings nearing 40 feet or higher, lumen output becomes a key component to overall satisfaction.
18	jplist-folder-All-Posts-27105 Article-Article	jplist-topic-Green jplist-topic-Green-Energy jplist-topic-Led	0	08/24/2017 15:19:44	Many lights contain mercury. This is problematic for two reasons. One, when a light breaks most organizations simply sweep up the area, but do not disinfect it. Second, many discard aged or broken light bulbs in the trash. Mercury vapor by nature is odorless, colorless, and very toxic.
19	jplist-folder-All-Posts-27105 Video-Video	jplist-topic-Assessment jplist-topic-Lighting jplist-topic-Lighting-Assessment	0	08/24/2017 15:07:52	Audits are performed in person and at no charge. To ensure our work is accurate, a certified design specialist will review the auditors work and make further recommendations on additional fixtures or reduction of fixtures. The two parties then collaborate to ensure the project is accurate, return on investment is correctly calculated, and product will meet the customer's needs. The paperwork is finally reviewed by the project manager. The project manager reviews the design to ensure the illumination matches up with the products ordered, all safety measurements are prepared and utilized, and that the start of the date of the project can be met. Once the install is complete you can enjoy your new product and savings.
20	jplist-folder-All-Posts-27105 Video-Video	jplist-topic-About-Us jplist-topic-EnergyWare	0	08/24/2017 15:04:26	We take the time to analyze each of our clients individual lighting designs, and provide a professional assessment for realistic ROI's. We then recommend a solution specifically tailored to your organization.