Current File : //opt/RZphp74/includes/tests/setup.php
<?php

require_once 'Auth/PrefManager.php';

if (!empty($_ENV['MYSQL_TEST_USER']) && extension_loaded('mysqli')) {
    $dsn = array(
        'phptype' => 'mysqli',
        'username' => $_ENV['MYSQL_TEST_USER'],
        'password' => $_ENV['MYSQL_TEST_PASSWD'],
        'database' => $_ENV['MYSQL_TEST_DB'],

        'hostspec' => empty($_ENV['MYSQL_TEST_HOST'])
                ? null : $_ENV['MYSQL_TEST_HOST'],

        'port' => empty($_ENV['MYSQL_TEST_PORT'])
                ? null : $_ENV['MYSQL_TEST_PORT'],

        'socket' => empty($_ENV['MYSQL_TEST_SOCKET'])
                ? null : $_ENV['MYSQL_TEST_SOCKET'],
    );
} elseif (!empty($_ENV['PGSQL_TEST_USER']) && extension_loaded('pgsql')) {
    $dsn = array(
        'phptype' => 'pgsql',
        'username' => $_ENV['PGSQL_TEST_USER'],
        'password' => $_ENV['PGSQL_TEST_PASSWD'],
        'database' => $_ENV['PGSQL_TEST_DB'],

        'hostspec' => empty($_ENV['PGSQL_TEST_HOST'])
                ? null : $_ENV['PGSQL_TEST_HOST'],

        'port' => empty($_ENV['PGSQL_TEST_PORT'])
                ? null : $_ENV['PGSQL_TEST_PORT'],

        'socket' => empty($_ENV['PGSQL_TEST_SOCKET'])
                ? null : $_ENV['PGSQL_TEST_SOCKET'],

        'protocol' => empty($_ENV['PGSQL_TEST_PROTOCOL'])
                ? null : $_ENV['PGSQL_TEST_PROTOCOL'],

        'option' => empty($_ENV['PGSQL_TEST_OPTIONS'])
                ? null : $_ENV['PGSQL_TEST_OPTIONS'],

        'tty' => empty($_ENV['PGSQL_TEST_TTY'])
                ? null : $_ENV['PGSQL_TEST_TTY'],

        'connect_timeout' => empty($_ENV['PGSQL_TEST_CONNECT_TIMEOUT'])
                ? null : $_ENV['PGSQL_TEST_CONNECT_TIMEOUT'],

        'sslmode' => empty($_ENV['PGSQL_TEST_SSL_MODE'])
                ? null : $_ENV['PGSQL_TEST_SSL_MODE'],

        'service' => empty($_ENV['PGSQL_TEST_SERVICE'])
                ? null : $_ENV['PGSQL_TEST_SERVICE'],
    );
} else {
    die("skip DSN information not provided");
}
$tableName = null;

$db = &DB::connect($dsn);

if (DB::isError($db)) {
    if ($db->getMessage() == "DB Error: extension not found") {
        die("Skip You don't have the extension you need to connect to this database with the given DSN");
    } else {
        die("Skip Could not connect to database.");
    }
}

function createDatabase($defaultPrefs = array(), $tableName = null, $fieldNames = null) {

    $names = array(
            'user'    => 'user_id',
            'pref'    => 'pref_id',
            'value'    => 'pref_value',
            );

    if (!is_null($fieldNames))
        $names = array_merge($names, $fieldNames);

    if (is_null($tableName))
        $tableName = basename($_SERVER['SCRIPT_FILENAME'], ".php");

    $db = &DB::connect($GLOBALS['dsn']);
    if (DB::isError($db)) {

        print "Failure connecting to database.\n"
            .$db->getMessage()."\n";

        exit($db->getCode());

    } else {

        $sql = "CREATE TABLE ".$db->quoteIdentifier($tableName)." ("
            .$db->quoteIdentifier($names['user'])." varchar( 255 ) NOT null default '', "
            .$db->quoteIdentifier($names['pref'])." varchar( 32 ) NOT null default '', "
            .$db->quoteIdentifier($names['value'])." text NOT null, "
            ."PRIMARY KEY ( ".$db->quoteIdentifier($names['user']).", ".$db->quoteIdentifier($names['pref'])." ) "
            .");";

        $result = $db->query($sql);

        if (DB::isError($result)) {

            print "Failure creating required tables in database.\n"
                .$db->getMessage()."\n";

            exit($result->getCode());

        } else {

            register_shutdown_function('cleanUpDatabase', $tableName);

            foreach ($defaultPrefs as $user => $prefs) {

                foreach ($prefs as $pref => $value) {

                    $sql = "INSERT INTO ".$db->quoteIdentifier($tableName)." ("
                        .$db->quoteIdentifier($names['user']).", "
                        .$db->quoteIdentifier($names['pref']).", "
                        .$db->quoteIdentifier($names['value']).") "
                        ."VALUES (?, ?, ?);";

                    $result = $db->query($sql, array($user, $pref, $value));

                    if (DB::isError($result)) {

                        print "Unable to create default preference.\n"
                            ."User: $user\n"
                            ."Pref: $pref\n"
                            ."Value: $value\n"
                            .$result->getMessage()."\n";

                        exit($result->getCode());

                    }

                }

            }

        }

        $GLOBALS['tableName'] = $tableName;

    }

}

function cleanUpDatabase($tableName) {

    $db = DB::connect($GLOBALS['dsn']);
    if (DB::isError($db)) {
        print "DB Cleanup Failure\n"
            .$db->getMessage()."\n";

        exit($db->getCode());
    }

    $result = $db->query("DROP TABLE ".$db->quoteIdentifier($tableName));
    if (DB::isError($result)) {
        print "DB Cleanup Failure\n"
            .$result->getMessage()."\n";

        exit($result->getCode());
    }

}

function formatValue($value) {

    if (is_null($value)) {

        return "NULL";

    } elseif (!isset($value)) {

        return "(not set)";

    } elseif (is_bool($value)) {

        if ($value === true) {

            return "TRUE";

        } else {

            return "FALSE";

        }

    } elseif (is_string($value)) {

        return "\"$value\"";

    } elseif (is_array($value)) {

        return "Array(".count($value).")";

    } elseif (is_object($value)) {

        return "object ".get_class($value);

    } else {

        return $value;

    }

}

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
?>