<?php
require_once dirname(__FILE__) . '/accesscheck.php';

print 'Sorry, stresstest is out of date';

return;

function my_shutdown()
{
    global $tables;
    print 'Script status: ' . connection_status(); # unfortunately buggy in 4.2.1
    $res = Sql_query("select count(*) from $tables[user]");
    $row = Sql_fetch_row($res);

    print '<script language="Javascript" type="text/javascript"> document.forms[0].output.value="Done. Now there are ' . $row[0] . ' users in the database";</script>' . "\n";
    # register_shutdown_function("");
    exit;
}

register_shutdown_function('my_shutdown');

ignore_user_abort(1);
?>

<h3>Stresstest</h3>
Filling database with stress test information, please wait
<br/><b>Warning</b> this is quite demanding for your browser!
<?php

function fill($prefix, $listid)
{
    global $server_name, $tables, $table_prefix;
    # check for not too many
    $domain = getConfig('domain');
    $res = Sql_query("select count(*) from $tables[user]");
    $row = Sql_fetch_row($res);
    if ($row[0] > 50000) {
        error('Hmm, I think 50 thousand users is quite enough for a test<br/>This machine does need to do other things you know.');
        print '<script language="Javascript" type="text/javascript"> document.forms[0].output.value="Done. Now there are ' . $row[0] . ' users in the database";</script>' . "\n";

        return 0;
    }

    # fill the database with "users" who have any combination of attribute values
    $attributes = array();
    $res = Sql_query("select * from $tables[attribute] where type = \"select\" or type = \"checkbox\" or type=\"radio\"");
    $num_attributes = Sql_Affected_rows();
    $total_attr = 0;
    $total_val = 0;

    while ($row = Sql_fetch_array($res)) {
        array_push($attributes, $row['id']);
        ++$total_attr;
        $values[$row['id']] = array();
        $res2 = Sql_query("select * from $table_prefix" . 'listattr_' . $row['tablename']);
        while ($row2 = Sql_fetch_array($res2)) {
            array_push($values[$row['id']], $row2['id']);
            ++$total_val;
        }
    }
    $total = $total_attr * $total_val;
    if (!$total) {
        Fatal_Error('Can only do stress test when some attributes exist');

        return 0;
    }

    for ($i = 0; $i < $total; ++$i) {
        $data = array();
        reset($attributes);
        while (list($key, $val) = each($attributes)) {
            $data[$val] = current($values[$val]);
            if (!$data[$val]) {
                reset($values[$val]);
                $data[$val] = current($values[$val]);
            }
            next($values[$val]);
        }

        $query = sprintf('insert into %s (email,entered,confirmed) values("testuser%s",now(),1)',
            $tables['user'], $prefix . '-' . $i . '@' . $domain);
        $result = Sql_query($query, 0);

        $userid = Sql_insert_id();
        if ($userid) {
            $result = Sql_query("replace into $tables[listuser] (userid,listid,entered) values($userid,$listid,now())");
            reset($data);
            while (list($key, $val) = each($data)) {
                if ($key && $val) {
                    Sql_query("replace into $tables[user_attribute] (attributeid,userid,value) values(" . $key . ",$userid," . $val . ')');
                }
            }
        }
    }

    return 1;
}

print formStart(' class="testOutput" ') . '<input type="text" name="output" size=45></form>';
print '<p class="button">' . PageLink2('stresstest', 'Erase Test information', 'eraseall=yes') . ' (may take a while)';

ob_end_flush();
flush();

$testlists = array();
$res = Sql_Query("select id from $tables[list] where name like \"%test%\"");
while ($row = Sql_Fetch_Row($res)) {
    array_push($testlists, $row[0]);
}

if (!ini_get('safe_mode')) {
    if (!count($testlists)) {
        print '<script language="Javascript" type="text/javascript"> document.forms[0].output.value="Error: cannot find any test lists to use";</script>' . "\n";
    } elseif (!isset($eraseall)) {
        print '<script language="Javascript" type="text/javascript"> document.forms[0].output.value="Filling ";</script>' . "\n";
        for ($i = 0; $i <= 100; ++$i) {
            set_time_limit(60);
            flush();
            reset($testlists);
            while (list($key, $val) = each($testlists)) {
                if (!fill(getmypid() . $i, $val)) {
                    return;
                }
            }
        }
    } else {
        $req = Sql_Query("select id from $tables[user] where email like \"testuser%\"");
        $i = 1;
        set_time_limit(60);
        print '<script language="Javascript" type="text/javascript"> document.forms[0].output.value="Erasing ";</script>' . "\n";
        flush();
        while ($row = Sql_Fetch_row($req)) {
            Sql_Query("delete quick from $tables[user_attribute] where userid = $row[0]");
            Sql_Query("delete quick from $tables[listuser] where userid = $row[0]");
            Sql_Query("delete quick from $tables[usermessage] where userid = $row[0]");
            Sql_Query("delete quick from $tables[user] where id = $row[0]");
            ++$i;
        }
    }
} else {
    print Error('Cannot do stresstest in safe mode');
}

?>
