예제 #1
0
function setupTable($tableName, $createSQL = '', $silent = true, $arrAlter = '')
{
    global $Translation;
    ob_start();
    echo '<div style="padding: 5px; border-bottom:solid 1px silver; font-family: verdana, arial; font-size: 10px;">';
    // is there a table rename query?
    if (is_array($arrAlter)) {
        $matches = array();
        if (preg_match("/ALTER TABLE `(.*)` RENAME `{$tableName}`/", $arrAlter[0], $matches)) {
            $oldTableName = $matches[1];
        }
    }
    if ($res = @db_query("select count(1) from `{$tableName}`")) {
        // table already exists
        if ($row = @db_fetch_array($res)) {
            echo str_replace("<TableName>", $tableName, str_replace("<NumRecords>", $row[0], $Translation["table exists"]));
            if (is_array($arrAlter)) {
                echo '<br>';
                foreach ($arrAlter as $alter) {
                    if ($alter != '') {
                        echo "{$alter} ... ";
                        if (!@db_query($alter)) {
                            echo '<span class="label label-danger">' . $Translation['failed'] . '</span>';
                            echo '<div class="text-danger">' . $Translation['mysql said'] . ' ' . db_error(db_link()) . '</div>';
                        } else {
                            echo '<span class="label label-success">' . $Translation['ok'] . '</span>';
                        }
                    }
                }
            } else {
                echo $Translation["table uptodate"];
            }
        } else {
            echo str_replace("<TableName>", $tableName, $Translation["couldnt count"]);
        }
    } else {
        // given tableName doesn't exist
        if ($oldTableName != '') {
            // if we have a table rename query
            if ($ro = @db_query("select count(1) from `{$oldTableName}`")) {
                // if old table exists, rename it.
                $renameQuery = array_shift($arrAlter);
                // get and remove rename query
                echo "{$renameQuery} ... ";
                if (!@db_query($renameQuery)) {
                    echo '<span class="label label-danger">' . $Translation['failed'] . '</span>';
                    echo '<div class="text-danger">' . $Translation['mysql said'] . ' ' . db_error(db_link()) . '</div>';
                } else {
                    echo '<span class="label label-success">' . $Translation['ok'] . '</span>';
                }
                if (is_array($arrAlter)) {
                    setupTable($tableName, $createSQL, false, $arrAlter);
                }
                // execute Alter queries on renamed table ...
            } else {
                // if old tableName doesn't exist (nor the new one since we're here), then just create the table.
                setupTable($tableName, $createSQL, false);
                // no Alter queries passed ...
            }
        } else {
            // tableName doesn't exist and no rename, so just create the table
            echo str_replace("<TableName>", $tableName, $Translation["creating table"]);
            if (!@db_query($createSQL)) {
                echo '<span class="label label-danger">' . $Translation['failed'] . '</span>';
                echo '<div class="text-danger">' . $Translation['mysql said'] . db_error(db_link()) . '</div>';
            } else {
                echo '<span class="label label-success">' . $Translation['ok'] . '</span>';
            }
        }
    }
    echo "</div>";
    $out = ob_get_contents();
    ob_end_clean();
    if (!$silent) {
        echo $out;
    }
}
$prevMD5 = @implode('', @file(dirname(__FILE__) . '/setup.md5'));
$thisMD5 = md5(@implode('', @file("./updateDB.php")));
if ($thisMD5 == $prevMD5) {
    $setupAlreadyRun = true;
} else {
    // set up tables
    if (!isset($silent)) {
        $silent = true;
    }
    // set up tables
    setupTable('diseases', "create table if not exists `diseases` ( `id` INT unsigned not null auto_increment , primary key (`id`), `short_name` VARCHAR(40) not null , `latin_name` VARCHAR(40) , `description` TEXT , `other_details` TEXT , `comments` TEXT ) CHARSET latin1", $silent);
    setupTable('patients', "create table if not exists `patients` ( `id` INT unsigned not null auto_increment , primary key (`id`), `last_name` VARCHAR(40) not null , `first_name` VARCHAR(40) not null , `gender` VARCHAR(10) not null default 'Unknown' , `birth_date` DATE , `age` INT , `address` TEXT , `city` VARCHAR(40) , `state` VARCHAR(15) , `zip` CHAR(8) , `home_phone` VARCHAR(40) , `work_phone` VARCHAR(40) , `mobile` VARCHAR(40) , `other_details` TEXT , `comments` TEXT , `filed` DATETIME , `last_modified` VARCHAR(40) ) CHARSET latin1", $silent);
    setupTable('symptoms', "create table if not exists `symptoms` ( `id` INT unsigned not null auto_increment , primary key (`id`), `name` VARCHAR(80) not null , `description` TEXT , `comments` TEXT ) CHARSET latin1", $silent);
    setupTable('disease_symptoms', "create table if not exists `disease_symptoms` ( `id` INT unsigned not null auto_increment , primary key (`id`), `disease` INT unsigned not null , `symptom` INT unsigned not null , `expected_probability` VARCHAR(40) , `minimum` VARCHAR(40) , `maximum` VARCHAR(40) , `reading_other_value` VARCHAR(40) , `comments` TEXT ) CHARSET latin1", $silent);
    setupIndexes('disease_symptoms', array('disease', 'symptom'));
    setupTable('patient_symptoms', "create table if not exists `patient_symptoms` ( `id` INT unsigned not null auto_increment , primary key (`id`), `patient` INT unsigned not null , `symptom` INT unsigned not null , `observation_date` DATE , `observation_time` TIME , `symptom_value` VARCHAR(40) ) CHARSET latin1", $silent);
    setupIndexes('patient_symptoms', array('patient', 'symptom'));
    // save MD5
    if ($fp = @fopen(dirname(__FILE__) . '/setup.md5', 'w')) {
        fwrite($fp, $thisMD5);
        fclose($fp);
    }
}
function setupIndexes($tableName, $arrFields)
{
    if (!is_array($arrFields)) {
        return false;
    }
    foreach ($arrFields as $fieldName) {
        if (!($res = @mysql_query("SHOW COLUMNS FROM `{$tableName}` like '{$fieldName}'"))) {
            continue;