예제 #1
0
        ob_end_flush();
        $db->query("UPDATE " . $db->config['prefix'] . "email_templates\n                    SET day='" . $config['mail_not_completed_days'] . "'\n                    WHERE name='mail_not_completed' and day IS NULL");
        print "OK<br />";
        ob_end_flush();
    }
}
/* ******************************************************************************* *
 *                  M A I N
 */
$old_db_version = $db->query_one("\n    SELECT value\n    FROM {$db->config[prefix]}config\n    WHERE name='db_version'\n    ");
print "Current database version: [{$old_db_version}] <small>(may be different from aMember version number)</small>.\n<br />";
$f = join('', file('../amember.sql'));
if (preg_match("/REPLACE INTO @DB_MYSQL_PREFIX@config \\(name,type,value\\) VALUES \\('db_version', 0, '(\\d+)'\\)/", $f, $rr)) {
    print "Version of <strong>amember.sql</strong> file is [{$rr['1']}].\n<br />";
}
$create_email_templates = !email_templates_created();
create_mysql_tables();
if (!$admin_accounts_created) {
    create_admin_accounts();
}
check_aff_commission_id();
$d =& amDb();
if ($d->selectCell("SELECT COUNT(*) FROM ?_countries") <= 0) {
    load_countries_from_file();
}
if ($d->selectCell("SELECT COUNT(*) FROM ?_states") <= 0) {
    load_states_from_file();
}
if ($create_email_templates) {
    print "<br /><br /><strong>Default e-mail templates were imported (from amember.sql file).<br />\n    If you wish to load your templates to database from text files, click the following link:\n    <a target='_blank' href='email_templates.php?a=convert'>Import templates from text files</a><br />";
}
예제 #2
0
function create_mysql_tables()
{
    $vars = $_POST;
    $conn = @mysql_connect($vars['@DB_MYSQL_HOST@'], $vars['@DB_MYSQL_USER@'], $vars['@DB_MYSQL_PASS@']);
    if (!$conn) {
        exit_errors("Cannot connect to mysql (" . mysql_error() . ")");
    }
    $dbc = @mysql_select_db($vars['@DB_MYSQL_DB@']);
    if (!$dbc) {
        exit_errors("Cannot select database '" . $vars["@DB_MYSQL_DB@"] . "' (" . mysql_error() . ")");
    }
    if (!is_readable("amember.sql")) {
        exit_errors("File [amember.sql] not found, make sure you've uploaded all files");
    }
    $file = join('', file("amember.sql"));
    $file = str_replace('@DB_MYSQL_PREFIX@', $vars['@DB_MYSQL_PREFIX@'], $file);
    $file = preg_replace('/^\\s+\\#(.*)$/m', '', $file);
    preg_match_all('/(CREATE TABLE\\s+(.+?)\\s+.+?|.+?);\\s*$/ms', $file, $out);
    $vars['@CURL_PATH@'] = guess_curl();
    $prefix = $vars['@DB_MYSQL_PREFIX@'];
    $email_templates_created = email_templates_created($prefix);
    foreach ($out[0] as $sql) {
        foreach ($vars as $k => $v) {
            if ($k == '@ADMIN_PASS@') {
                srand(time());
                $v = crypt($v);
            }
            if ($k == '@PAYMENT_PLUGINS@') {
                $v = serialize($v);
            }
            if ($k == '@PROTECT_PLUGINS@') {
                $v = serialize($v);
            }
            $k = mysql_escape_string($k);
            $v = mysql_escape_string($v);
            $sql = str_replace($k, $v, $sql);
        }
        if (preg_match('/CREATE TABLE\\s+(\\w+)/', $sql, $regs)) {
            $tname = $regs[1];
            if (mysql_query("SELECT * FROM {$tname} LIMIT 1") && !mysql_errno()) {
                continue;
                // SKIP TABLE CREATION
            }
        } elseif (preg_match("/INSERT INTO {$prefix}email_templates/", $sql) && $email_templates_created) {
            continue;
        } elseif (preg_match('/MODIFY\\s+(\\w+)\\s+(.+);/', $sql, $regs)) {
            $tname = $regs[1];
            $mreq = $regs[2];
            if (preg_match('/FIELD\\s+(\\w+)\\s+(.+)/', $mreq, $regs)) {
                $field = $regs[1];
                $q = mysql_query("SHOW FIELDS FROM {$tname}");
                $sql = '';
                while (list($f, $t, $null, $index, $add) = mysql_fetch_row($q)) {
                    if ($f == $field) {
                        $sql = "ALTER TABLE {$tname} CHANGE {$field} {$field} {$regs['2']};";
                        break;
                    }
                }
                if (!$sql) {
                    $sql = "ALTER TABLE {$tname} ADD {$field} {$regs['2']};";
                }
            } elseif (preg_match('/DROP_FIELD\\s+(\\w+)/', $sql, $regs)) {
                $field = $regs[1];
                $q = mysql_query("SHOW FIELDS FROM {$tname}");
                $sql = '';
                while (list($f, $t, $null, $index, $add) = mysql_fetch_row($q)) {
                    if ($f == $field) {
                        $sql = "ALTER TABLE {$tname} DROP {$field}";
                        break;
                    }
                }
            } elseif (preg_match('/(UNIQUE INDEX|INDEX)\\s+(\\w+)\\s+.+/', $mreq, $regs)) {
                $index = $regs[2];
                $q = mysql_query("SHOW INDEX FROM {$tname}");
                while (list($t, $t, $index1) = mysql_fetch_row($q)) {
                    if ($index1 != $index) {
                        continue;
                    }
                    mysql_query("ALTER TABLE {$tname} DROP INDEX {$index}");
                }
                $sql = "ALTER TABLE {$tname} ADD {$regs['0']}";
            } else {
                // unknown modify request
                print "unknown modify request";
                continue;
            }
        }
        $sql = preg_replace('/;\\s*$/s', '', $sql);
        mysql_query($sql);
        if ($err = mysql_error()) {
            exit_errors($err . "<br>SQL: <pre>{$sql}</pre>");
        }
    }
    // insert countries
    foreach (array('countries', 'states') as $ff) {
        $fn = "sql-{$ff}.sql";
        $q = mysql_query($s = "SELECT COUNT(*) FROM {$prefix}{$ff}");
        if ($e = mysql_error()) {
            print "SQL Error: {$e}<br />\n";
        }
        $c = mysql_fetch_row($q);
        $c = $c[0];
        if ($c) {
            continue;
        }
        if (!is_readable($fn)) {
            exit_errors("File [{$fn}] not found, make sure you've uploaded all files");
        }
        $sql = join('', file("{$fn}"));
        $sql = str_replace('@DB_MYSQL_PREFIX@', $vars['@DB_MYSQL_PREFIX@'], $sql);
        mysql_query($sql);
        if ($err = mysql_error()) {
            exit_errors($err . " in [{$fn}]");
        }
    }
}